派生类到基类 转换 的 可访问性 ZZ

505阅读 0评论2010-06-17 wqfhenanxc_cu
分类:C/C++


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
}

上一篇:Singleton模式(一) ZZ
下一篇:C++深度探索系列:智能指针一 转载