class Demo1 { public: static Demo1* Create() { return new Demo1; } private: // 注意:私有掉构造函数 Demo1() {} Demo1(const Demo1&); void operator=(const Demo1&); }; class Test1 : public Demo1 { }; template class SealedT { // 注意:不是 friend class T; friend T; private: SealedT() {} }; // 注意:是虚继承 class Demo2 : virtual SealedT { }; class Test2 : public Demo2 { }; class Sealed { protected: Sealed() {} }; class Demo3 : virtual Sealed { }; class Test3 : public Demo3 { }; class Demo4 final { }; // 不能从 final 类继承,编译失败 /* class Test4 : public Demo4 { }; */ int main() { // Demo1* pd1 = new Demo1; // 错误:不能调用私有构造 Demo1* pd1 = Demo1::Create(); // Test1* pt1 = new Test1; // 错误:不能调用基类私有构造 Demo2* pd2 = new Demo2; // Test2* pt2 = new Test2; // 错误:不能访问间接虚基类 Demo3* pb3 = new Demo3; // Test3* pt3 = new Test3; // 错误:不能访问间接虚基类 Demo4* pd4 = new Demo4; }