Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1074691
  • 博文数量: 242
  • 博客积分: 10209
  • 博客等级: 上将
  • 技术积分: 3028
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-12 09:27
文章分类

全部博文(242)

文章存档

2014年(1)

2013年(1)

2010年(51)

2009年(65)

2008年(124)

我的朋友

分类: C/C++

2010-06-17 16:40:46


C++ PRIMER第四版中15.3节中讲解派生类到基类转换的可访问性,
给出的规则如下:
1.如果是 public 继承,则用户代码和后代类都可以使用派生类到基类的转换。

2.如果类是使用 private 或 protected 继承派生的,则用户代码不能将派生类型对象转换为基类对象。

3.如果是 private 继承,则从 private 继承类派生的类不能转换为基类。

4.如果是 protected 继承,则后续派生类的成员可以转换为基类类型。

5.无论是什么派生访问标号,派生类本身都可以访问基类的 public 成员,因此,派生类本身的成员和友元总是可以访问派生类到基类的转换。

检验代码如下:
class c00
{
private:
int c00a;
};

class c10 : public c00
{
private:
int c10a;
public:
void f(const c00 & c) // ok 规则1
{
}
};

class c11 : protected c00
{
private:
int c11a;
public:
void f(const c00 & c) // ok 规则5
{
}
};

class c12 : private c00
{
private:
int c12a;
public:
void f(const c00 & c) //ok 规则5
{
}
};

class c21 : public c11
{
private:
int c21a;
public:
void f(const c00 & c) // ok 规则4
{
}
};

class c22 : public c12
{
private:
int c22a;
public:
void f(const c00 & c) //error 规则3
{
}
};

void f(const c00 & c)
{
}

void main()
{
c10 t10;
c11 t11;
c12 t12;
f(t10);
// ok 规则1
f(t11); //error 规则2
f(t12); //error 规则2
}

阅读(961) | 评论(0) | 转发(0) |
0

上一篇:bloom filter

下一篇:你懂的

给主人留下些什么吧!~~