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

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

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

相关推荐
Homeey2 分钟前
深入理解ThreadLocal:从原理到架构实践的全面解析
java·后端
ANGLAL4 分钟前
27.短链系统
java
周杰伦_Jay7 分钟前
【Go微服务框架深度对比】Kratos、Go-Zero、Go-Micro、GoFrame、Sponge五大框架
开发语言·微服务·golang
杰瑞哥哥15 分钟前
标准 Python 项目结构
开发语言·python
shykevin18 分钟前
Rust入门
开发语言·后端·rust
QT 小鲜肉22 分钟前
【个人成长笔记】将Try Ubuntu里面配置好的文件系统克隆在U盘上(创建一个带有持久化功能的Ubuntu Live USB系统)
linux·开发语言·数据库·笔记·ubuntu
Lisonseekpan22 分钟前
Git 命令大全:从基础到高级操作
java·git·后端·github·团队开发
Pointer Pursuit27 分钟前
C++——二叉搜索树
开发语言·c++
澪吟30 分钟前
C++ 从入门到进阶:核心知识与学习指南
开发语言·c++
CodeCraft Studio37 分钟前
国产化Excel处理控件Spire.XLS教程:使用Java将CSV转换为PDF(含格式设置)
java·pdf·excel·spire.xls·文档格式转换·csv转pdf