如果一个父类中的析构函数如果设置为 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;
}
总结,如果创建对象的时候不能访问析构函数,则会报错,继承中也要要求子类能够访问父类的析构函数。