如果一个父类中的析构函数如果设置为 private 权限 ,一个子类public继承了这个父类,那么 这个父类可以创建对象吗?
答案是 不可以
看看下面的代码
class A {
public:
private:
~A() {
}
};
class B :public A {
A a; // 这个地方编译不报错,但是这个地方运行会报错
~B() {} // 这个地方会报错 , 因为不能访问A的析构
};
int main()
{
B b; // 这个是错误的
}
那么解决方案是什么?
我们可以将 类 B设置为 A 的友元
class B;
class A {
friend B;
public:
private:
~A() {
}
};
class B :public A {
A a;
~B() {}
};
int main()
{
B b;
}
上面的还是会报错,因为对于main函数来说,类B的析构函数还是 private 权限,我们需要将B的析构函数设置为public权限才行
class B;
class A {
friend B;
public:
private:
~A() {
}
};
class B :public A {
public:
A a;
~B() {}
};
int main()
{
B b;
}
总结,如果创建对象的时候不能访问析构函数,则会报错,继承中也要要求子类能够访问父类的析构函数。