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

如果一个父类中的析构函数如果设置为 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;  
}

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

相关推荐
Gu Gu Study4 分钟前
Spring运行程序RabbitMQ并没有自动创建队列的问题解决
java·spring cloud·rabbitmq
vortex58 分钟前
Tomcat 日志文件名的命名规范
java·tomcat
little_xianzhong16 分钟前
Java 日期字符串万能解析工具类(支持多种日期格式智能转换)
java·开发语言
刘 大 望18 分钟前
传输层:UDP/TCP协议
java·网络·网络协议·tcp/ip·udp·信息与通信
小胖墩有点瘦22 分钟前
【基于协同过滤的校园二手交易平台】
java·vue·毕业设计·springboot·计算机毕业设计·协同过滤·校园二手交易平台
我真的是大笨蛋28 分钟前
G1 垃圾收集器深入解析
java·jvm·笔记·缓存
Dersun29 分钟前
python学习进阶之异常和文件操作(三)
开发语言·python·学习·json
我好喜欢你~29 分钟前
C#---Expression(表达式)
开发语言·c#
ytadpole37 分钟前
揭秘 XXL-JOB 调度:从代码深处看路由策略的精妙设计
java·后端
27^×1 小时前
Linux 常用命令速查手册:从入门到实战的高频指令整理
java·大数据·linux