一.将基类的默认构造函数定义为私有的
class AA
{
private:
AA()
{}
protected:
int _a;
};
class BB : public AA
{
};
int main()
{
BB b;
return 0;
}
编译一下,编译器报错,AA类无法被BB类继承
类BB虽然可以被定义出来,但是AA类的默认构造函数对BB类是不可见的,BB类也就无法合成默认构造函数.
二.利用静态成员函数调用默认构造函数
可是我们把AA类的默认构造函数定义为私有的,在类外面也就使用不了了,如何解决这个问题?
虽然类外面不可以调用,但是类内可以调用自己的私有成员,基于这个理论,我们可以增加一个专门用来访问构造函数的函数.
注意:这里必须用static,因为静态成员函数不需要t用对象来调用.
//方法一
public:
static AA* GetAA()
{
return new AA;
}
//调用方法
AA* p1 = AA::GetAA();
//方法二
public:
static AA GetAA()
{
return AA();
}
//调用方法
AA aa = AA::GetAA();