继承中的析构函数的权限的深入了解

如果一个父类中的析构函数如果设置为 private 权限 ,一个子类public继承了这个父类,那么 这个父类可以创建对象吗?

答案是 不可以

看看下面的代码

cpp 复制代码
class A {
public:

private:
	~A() {

	}
};

class B :public A {

	A a;   // 这个地方编译不报错,但是这个地方运行会报错
	~B() {}    // 这个地方会报错 , 因为不能访问A的析构
};

int main()
{
	B b;  // 这个是错误的
}

那么解决方案是什么?

我们可以将 类 B设置为 A 的友元

cpp 复制代码
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权限才行

cpp 复制代码
class B;
class A {
	friend B;
public:

private:
	~A() {

	}
};

class B :public A {
public:
	A a;   
	~B() {}    
};

int main()
{
	B b;  
}

总结,如果创建对象的时候不能访问析构函数,则会报错,继承中也要要求子类能够访问父类的析构函数。

相关推荐
怒放吧德德6 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆8 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
心之语歌10 小时前
基于注解+拦截器的API动态路由实现方案
java·后端
华仔啊11 小时前
Stream 代码越写越难看?JDFrame 让 Java 逻辑回归优雅
java·后端
ray_liang11 小时前
用六边形架构与整洁架构对比是伪命题?
java·架构
Ray Liang13 小时前
用六边形架构与整洁架构对比是伪命题?
java·python·c#·架构设计
Java水解13 小时前
Java 中间件:Dubbo 服务降级(Mock 机制)
java·后端
SimonKing17 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean17 小时前
Jackson View Extension Spring Boot Starter
java·后端
Seven9718 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java