xueyuehanzhu123的专栏

构造函数是实现继承的关键,子类对象在构造时,首先调用父类的构造函数,,在调用自己的构造函数。

#include <iostream>using namespace std;template <typename T>class A{public:friend T;private:A(){}~A(){}};class B:virtual public A <B>{public:B(){}~B(){}};//class C:virtual public B//{// public://C(){}//~C(){}//};int main(){B b;// C c;定义一个友元类friend T,B在继承的时候,用自己去具体化A,将自己设置为A的友元类,这样就可以访问A的私有函数(构造函数),B就可以正常定义对象b,C虚继承B,但是友元关系不能继承。所以C在构造时,不能调用A的构造函数,如果打开注释部分,将报下边的错误。

template.cpp: In constructor ‘C::C()’:template.cpp:11:3: error: ‘A<T>::A() [with T = B]’ is private A(){} ^template.cpp:25:6: error: within this context C(){} ^template.cpp:12:3: error: ‘A<T>::~A() [with T = B]’ is private ~A(){} ^template.cpp:25:6: error: within this context C(){} ^template.cpp: In destructor ‘C::~C()’:template.cpp:12:3: error: ‘A<T>::~A() [with T = B]’ is private ~A(){} ^template.cpp:26:7: error: within this context ~C(){} ^

最糟糕的行为是抱怨,最易见效 的努力是从自己做起。

xueyuehanzhu123的专栏

相关文章:

你感兴趣的文章:

标签云: