class A { private: int a; public: virtual void Print( ) = 0 ; //纯虚函数 void fun( ) { cout << "fun"; } };
class B1 { protected: B1() {} }; class B2 { private: B2() {} }; class D1 : public B1 { public: D1() {} }; class D2 : public B2 { public: D2() {} // error C2248: “B2::B2”: 无法访问 private 成员(在“B2”类中声明) }; int main() { B1 b1; // error C2248: “B1::B1”: 无法访问 protected 成员(在“B1”类中声明) B2 b2; // error C2248: “B2::B2”: 无法访问 private 成员(在“B2”类中声明) D1 d1; // OK D2 d2; // error return 0; }
A a ; // 错,A 是抽象类,不能创建对象 A * pa ; // ok,可以定义抽象类的指针和引用 pa = new A ; //错误, A 是抽象类,不能创建对象
class Base { public: virtual void func( ) = 0; }; class Derived : public Base { } int main( ) { Derived d; //error C2259: “Derived”: 不能实例化抽象类 return 0; }
上例中,派生类中没有对基类的纯虚函数进行定义(派生类不重置基类的纯虚函数),那么派生类自身也就成了一个抽象类,无法被实例化。
class ABC { public: ABC( ) { … } ABC(int x) { … } ~ABC( ) { … } virtual void open( ) = 0; virtual void print() { … } int getCount( ) { … } private: int n; }
class BasicFile { public: virtual int open( ) =0; virtual int close( ) =0; virtual int flush( ) = 0; }; class InFile : public BasicFile { public: virtual int open( ) { … }; virtual int close( ) { … }; virtual int flush( ) { … }; }; class OutFile : public BasicFile { public: virtual int open( ) { … }; virtual int close( ) { … }; virtual int flush( ) { … }; };
class IIntroSpect { public: virtual void listFields ( ) =0; virtual void listMethods( ) =0; }; class MyClass : public IIntroSpect// 有实例的类 { public: void listFields ( ) { … }; void listMethods( ) { … }; // other members of MyClass };
原文:https://www.cnblogs.com/wkfvawl/p/10802625.html