c++抽象类
在c++抽象类中,然而在其派生类的成员变量中,有定义了抽象类的一个指针对象,这是什么情况,怎么解释?有人能帮解答下吗?例子如下:
class A{
protected:
A();
public:
virtual void show()= 0;
};
class B:public A{
A *a;//现在我的问题就在这里,为什么可以再这里初始化A抽象类的指针对象,在这里初始化有什么意义,希望哪位大侠能帮我解答一下。
public:
void show(){
ccout<<"i am here";
}
}
[解决办法]
class A{protected: A();public: virtual void show()= 0;};class B:public A{A *a;//现在我的问题就在这里,为什么可以再这里初始化A抽象类的指针对象,在这里初始化有什么意义,希望哪位大侠能帮我解答一下。// 这里不是A* a的初始化,这里只是一个声明。而且换成A a,就不可以。抽象类不可以实例化。public: void show(){ ccout<<"i am here";}}
[解决办法]
这个A * a指针的目的是指向A的某个派生类实例。这种用法在数据结构中很常见,也很重要。
B b1,b2,b3;
b1.a=&b2;
b2.a=&b3;
b3.a=&b1;
形成一个循环链表。
[解决办法]
1.A* a 你只是定义了一个指向A的指针,并不会调用构造函数;2.你是不能实例化一个抽象类的。3.这样的做的意义就是起一种保护作用,典型的就是单例模型,你可以研究研究
[解决办法]
A *a;该成员变量的作用是为了指向某一A的子类的对象。抽象类无法实例化,只能表示为指针类型或引用类型。当然在lz的例子中A *a;没有发挥什么作用,基本无用武之地,也许就是仅仅为了测试。
给出一个例子吧,将B对象自身赋给成员a:
class A{protected: A();public: virtual void show()= 0;};class B:public A{A *a;public: B() { a = this; } void show(){ ccout<<"i am here"; } void invokeByA() { a->show(); }}