私有继承是否调用父类构造函数 #include <iostream> using namespace std;
class A { public: A(){} ~A(){} A(const A& that){}
}; class B : private A { public: B(){} ~B(){} //这???? B(B& that):A(that){} }; //以上代码编译通过。加上后面的代码编译出错 //(privateclass.cpp:21:8: 错误: 请求从‘A’转换到非标量类型‘B’) int main () { A a; B b = a; return 0; }
继承 类 [解决办法] 你的错误在B b = a; private继承,在派生类内是可以随便调用基类的public函数的,包括构造函数,但在类外就不能调用任何基类函数,只能调用派生类的public函数 private继承还会导致派生类与基类无法互相转化,但你的情况不是这样,你试图用基类对象初始化派生类对象,就算不是private继承,这本来就是通不过的吧,基类无法转化为派生类 [解决办法] B(B& that):A(that){} A没有参数为B&的构造函数 [解决办法] 和继承没有关系, B b = a; 是用 A 来构造 B 但是你的 B 没有接受 A 参数的构造函数. 改成 B(A& that):A(that){} 这样就是 OK 的. [解决办法] private继承会调用构造,它的作用是用来组合的。B b = a;你这个是想用多态还是咋回事?