C++/设计一个类
来源:互联网 发布:idea开发java图形界面 编辑:程序博客网 时间:2024/06/16 00:46
–1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。
1.设计一个类不能被继承
解法一:将构造函数设为私有函数
在C++中,子类的构造函数会自动调用父类的构造函数,子类的析构函数也会调用父类的析构函数。要想一个类不能被继承,只要把它的构造函数和析构函数都设置为私有函数。那么当一个类试图从那里继承时,势必会因为调用构造函数和析构函数而导致编译错误。
可是这个类型的构造函数和析构函数都是私有函数,我们怎样才能得到该类型的实例呢?我们可以通过定义共有的静态函数来创建和释放实例—-利用虚拟继承
2.设计一个类只能在堆上创建对象
类对象只能建立在堆上,就是不能静态的建立类对象,即不能直接调用类的构造函数。
分析:
(1)容易想到将构造函数设为私有,在构造函数私有之后,无法在类外部调用构造函数来构造类对象,只能使用new运算符来建立对象,然而,前面已经说过,new运算符的执行过程分为两步,c++提供new运算符的重载,其实是只提供operator new() 函数,而operator()函数是进行内存分配的,无法提供构造功能,因此这种方法是不可以的
(2)对象建立在栈上面时,是由编译器分配内存空间的,调用构造函数来构造栈对象,当对象使用完之后,编译器会调用析构函数来释放栈对象所占的空间,编译器管理了对象的整个生命周期,编译器为对象分配空间的时候,只要是非静态的函数都会检查,包括析构函数,但是此时析构函数不可访问,编译器无法调用类的析构函数来释放内存,那么编译器将无法在栈上为对象分配内存,所以,编译器在为类对象分配栈空间时,先检查类的析构函数的访问性,其实不光是析构函数,只要是非静态的函数,编译器都会进行检查。
因此,将析构函数设为私有,类对象就无法建立在栈上了。
- C++/设计一个类
- 如何用C实现一个类以及些许设计模式
- C++:1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象。 3.设计一个类只能在栈上创建对象。
- 用C语言设计一个简单计算器
- 一个 C 接口设计的问题
- c语言设计一个网球场使用程序
- 一个 C 接口设计的问题
- 设计一个string类
- 设计一个堆栈类
- 设计一个三角形类
- 设计一个工资类
- 设计一个长方形类
- 设计一个圆柱体类
- 设计一个一元一次方程类
- 设计一个立方体类
- 设计一个类
- C#--第八周实验--任务1--设计一个类,该类继承于已经设计好的接口
- C++[类设计] 一个使用new动态内存分配的集合类
- java对数据库进行增删改查
- LeetCode#17 Letter Combinations of a Phone Number
- maven项目如何创建
- C++子类对象隐藏了父类的同名成员函数(隐藏篇)
- matlab2013a中读取Microsoft Office Excel中数据的方法?
- C++/设计一个类
- sax解析原理与实例
- 父字符串.indexOf(子字符串) 返回值索引(区分大小写,没有匹配,返回-1)
- 用dom、jdom、dom4j来实现取出Oracle中dept表内容,并生成xml文件
- IOS webview 自适应高度和加入css样式
- Linux系统安全配置基线
- CardStackView卡堆栈视图
- LeetCode Weekly Contest 40解题思路
- 代写材料的注意事项