关于c++抽象基类的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 05:46:56
学习c++,对于抽象基类的认识是:基类中包含有纯虚函数,则为抽象基类。可是今天在关于虚基类书上看到这样一段程序和这样一句话,不能理解:
class DisObiect {......} 是虚基类
class Property:public virtual DisObject
{
......
protected:
Property(int id):参数初始化表
virtual ~Proterty(){}
.........
}
然后有这样一句话:Proterty类的构造函数和析构函数是受保护的,所以Proterty是一个抽象基类。
很困惑,抽象基类到底怎么定义的?

“Proterty类的构造函数和析构函数是受保护的,所以Proterty是一个抽象基类。 ” 这句话构不成因果关系,书有问题。构造函数和析构函数被保护起来,目的是不允许对象直接创建,要通过提供创建对象的成员函数去创建。

抽象类中包含纯虚函数,抽象类不可以实例化。

class Property:public virtual DisObject 这里用到了虚继承
所谓虚继承,看我下边的例子:
#include<iostream>
using namespace std;

class A{
public:
int a;
virtual void p(){};

};
class B : virtual public A{
public:
void p(){}
};
class C : virtual public A{
public:
void p(){}
};
class D : public B,public C{
public:
void p(){}
};
int main(){
D d;
d.B::a = 1;
d.C::a = 2;
if(d.B::a == d.C::a)
std::cout<<"a is shared"<<endl;
else
std::cout<<"a is not shared"<<endl;
getchar();
return 0;
}

你把虚继承的virtual去调后再运行一次,虚继承的话,D中的BC共享一个A。

只要记住 抽象类只能用做