private继承如何转换

《effective c++》中提到:

如果class之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象。

如果不能转换那多态就没有意义了,所以肯定是可以转换的,不过转换发生在derived class内部:

class B{
public:
    virtual void write(){   puts("B::write");   }
};

class D:private B{
private:
    virtual void write(){   puts("D::write");   }
public:
    static B* create()  {   return new D();     }//private继承,所以转换必须在class内部
};

int main(){
    B* b=D::create();
    b->write();//输出D::write
}
时间: 2024-10-11 21:58:38

private继承如何转换的相关文章

条款39:明智而审慎地使用private继承(use private inheritance judiciously)

NOTE: 1.private 继承意味 is-implemented-in-terms-of(根据某物实现出).它通常比复合(composition)的级别低.但是当derivated class需要访问protected base class的 成员,或需要重新定义继承而来的virtual函数时,这么设计是合理的. 2.和复合(composition)不同,private 继承可以造成empty base 最优化.这对致力于“对象尺寸最小化”的程度开发者而言,可能很重要.

Effective C++ 条款39 明智而审慎地使用private继承

1. public继承表明is-a的关系,要求接口的完全继承,而private继承表明"根据某物实现出的关系",要求仅仅继承实现,private继承有两个规则: 1). 经由private继承而来的基类的所有成员在派生类中都会变成private属性 2). 由于1),编译器不允许将派生类转为基类以防止对派生类private成员的非法访问. 2. 由条款38,private继承和复合具有相同作用——"根据某物实现出".两者之间,要尽可能使用复合,除非必要情况.必要情况

Effective C++ -----条款39:明智而审慎地使用private继承

Private继承意味is-implemented-in-terms of(根据某物实现出).它通常比复合(composition)的级别低.但是当derived class需要访问protected base class的成员,或需要重新定义继承而来的virtual函数时,这么设计是合理的. 和复合(composition)不同,private继承可以造成empty base最优化.这对致力于“对象尺寸最小化”的程序库开发者而言,可能很重要.

明智而审慎的使用private继承

private继承的意义在于“be implemented in turns of”. private继承与public继承时完全不同的,主要体现在两个地方 其一,public继承在子类中保持父类的访问权限,即父类中是public的成员函数或者成员便变量可,在子类中仍是public,对private或protected 的成员函数或成员变量亦是如此:但private继承则不是这样的,他破坏了父类红的访问权限标定,将之转成为private,这对子类本省并无影响,但却影响了子类的子类,子类的子类将无

private继承

class A { int a; int b; int fun(){ return a; } }; class B : private A { public: void funB() { int num = fun();//private继承派生类函数 基类为private根本访问不了,能访问protected和public } }; int main() { B b; return 0; }

(转)public、protect、private继承方式 C++

C里面的结构体内的成员不受任何机制保护,直接能用,比如StructtypeA.x;StructtypeA.y;StructtypeA.fun(); 而c++则不同,c++的类像强化型的结构体 public公有继承 protected保护继承 private私有继承 我们知道类的private和protected成员,在类外是不可以使用的.只有public成员可以在类外直接使用. 公有继承时,基类的private成员派生类也不可用,基类的public和protected成员在派生类中可直接使用.继

c++ public protected private 继承

1:访问控制 1.1 public 这类型成员可以被类本身函数访问,也可以被外部创建的类对象调用.子类对象与子类内部可以访问 1.2 protected类型成员,只能被类本身函数访问.外部创建的类对象没有访问权限.子类对象没有访问权限,子类内部可以访问 1.3 private类型成员,只能被类本身函数访问,外部创建的类对象没有访问权限.子类对象和子类内部都没有访问权限 class TestObject{ public: void Function(); void TestPublic(); pr

Effective C++ Item 39 明智而审慎地使用 private 继承

本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie 经验:private 继承意味 is-implemented-in-terms of.它通常比 composition 的级别低. 但是当 derived class 需要访问 protected base class 的成员,或需要重新定义继承而来的 virtual 函数时,这么设计是合理的 经验:和 composition 不同, private 继承可以造成 empty base 最

private 继承 真的没用吗??

private继承,在看到effective C++之前,我发现在我之前的代码里面,没有用到这个机制,但是认真回想起还是有一些影子. 大多数人认为private继承是没有用的,其实不然,在某些情况下,它也会带给你一些惊喜. 好,言归正传,之前已经数次提到过 public继承表示的是  "is   a "的关系,也就是说每一个derived对象D同时也是base对象,任何在base对象上的操作可以实施到derived对象身上. 例如: class Person{....}; class