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

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

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

相关推荐
似水এ᭄往昔1 分钟前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
气π16 分钟前
【JavaWeb】——(若依 + AI)-基础学习笔记
java·spring boot·笔记·学习·java-ee·mybatis·ruoyi
aningxiaoxixi16 分钟前
TTS 之 PYTHON库 pyttsx3
开发语言·python·语音识别
阿里云云原生23 分钟前
AgentScope Java 1.0:从模型到应用,AI Agent 全生命周期管理利器!
java·云原生
running up30 分钟前
Maven依赖管理和项目构建工具
java·maven
有点。37 分钟前
C++ ⼀级 2023 年06 ⽉
开发语言·c++
Mr.Jessy37 分钟前
JavaScript高级:深入对象与内置构造函数
开发语言·前端·javascript·ecmascript
charlie11451419138 分钟前
编写INI Parser 测试完整指南 - 从零开始
开发语言·c++·笔记·学习·算法·单元测试·测试
老华带你飞1 小时前
列车售票|基于springboot 列车售票系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端·学习·spring
忘记9261 小时前
session的工作原理
开发语言