用C++实现一个不能被继承的类
2013-10-26 23:14
519 查看
不能被继承?按照继承的理论知识分析,我们只要把类的构造函数设置为私有的,即可解决问题。
因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可
继承的目的。
定义静态方法,在方法内部实现一个对象,然后返回它的指针。这样就可以通过类访问静态方法返回对象指针,
这样
我们再设计一个析构函数就可以了,这样大功告成了
代码如下
不过这样只能在堆上建对象,不能自由的在堆与栈上。
下面从虚基类说起,虚基类使得从多个类派生出的对象只继承一个基类对象。例如B:public A,C:public A,D:public B,public C,D从B,C派生,而B和C都继承A,那么D里面将会有A的2个副本,如果A有变量声明的话,那么在D里面将会被声明2次,编译错误!所以产生了虚基类!《后面补充》
因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可
继承的目的。
定义静态方法,在方法内部实现一个对象,然后返回它的指针。这样就可以通过类访问静态方法返回对象指针,
这样
我们再设计一个析构函数就可以了,这样大功告成了
代码如下
class A { public: static A * Construct(int n) { A *pa = new A; pa->num = n; cout<<"num is:"<<pa->num<<endl; return pa; } static void Destruct(A * pIntance) { delete pIntance; pIntance = NULL; } private: A(){} ~A(){} public: int num; }; void main() { A *f = A::Construct(9); cout<<f->num<<endl; A::Destruct(f); }
不过这样只能在堆上建对象,不能自由的在堆与栈上。
下面从虚基类说起,虚基类使得从多个类派生出的对象只继承一个基类对象。例如B:public A,C:public A,D:public B,public C,D从B,C派生,而B和C都继承A,那么D里面将会有A的2个副本,如果A有变量声明的话,那么在D里面将会被声明2次,编译错误!所以产生了虚基类!《后面补充》
template <typename T> class Base { friend T; private: Base() {} ~Base() {} }; class Finalclass : virtual public Base<Finalclass> { public: Finalclass() {} ~Finalclass() {} }; void main() { Finalclass *p = new Finalclass; //堆上对象 Finalclass fs; //栈上对象 }
相关文章推荐
- 关于指针的一些事情
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C/C++数据对齐详细解析
- C++中引用的使用总结
- C++中引用(&)的用法与应用实例分析
- 解析C++ 浮点数的格式化输出
- 深入分析C++中几个最不常用的关键字
- c++中inline的用法分析
- 深入解析C++ Data Member内存布局
- 从汇编看c++中默认构造函数的使用分析
- 关于C++中的友元函数的一些总结
- C++的sstream标准库详细介绍
- 基于C++自动化编译工具的使用详解
- 浅谈C++中的string 类型占几个字节
- C/C++ 宏详细解析
- 深入分析C++中两个大数相乘结果不正确的问题
- 探讨C++中数组名与指针的用法比较分析
- 深入解析C++中的引用类型
- C++可变参数的实现方法
- C++中的常对象与常对象成员详解