题目:用C++设计一个不能被继承的类。
class SealedClass1
{
public:
static SealedClass1* GetInstance()
{
return new SealedClass1();
}
static void DeleteInstance(SealedClass1* pInstance)
{
delete pInstance;...
分类:
其他好文 时间:
2015-07-12 11:22:11
阅读次数:
177
对于这个问题,我首先想到的是将“父类”的构造函数声明为私有的,这样的话,子类就不能在自己的构造函数中调用父类的构造函数(就算没有显示调用父类的构造函数,编译器也会自动在子类的构造函数中插入调用父类构造函数的代码),于是就实现了不能被继承的类。同时,我们还是要能够产生这个类的对象,所有要公开一个方.....
分类:
其他好文 时间:
2015-07-10 18:14:32
阅读次数:
205
解法一:把构造函数设为私有 将构造函数定义为私有,然后通过定义公有的静态函数来创建和释放类的实例。 1 class SealedClass 1 2 { 3 public: 4 static SealedClass1* GetInstance() 5 { 6 ret...
分类:
编程语言 时间:
2015-06-25 19:17:13
阅读次数:
139
一道笔试题的思考:记得,找工作时,遇到了这样的一道笔试题。记不清是那个公司的笔试题,反正觉得自己当时还真费了一点功夫的,但是也就搞定了一部分,结果还是被另一部分给鄙视啦!现在静下来分析实现如下:题目:用C++设计一个不能被继承的类不能被继承?不能被继承?不能被继承?按照继承的理论知识分析,我们只要把...
分类:
编程语言 时间:
2015-05-11 19:56:23
阅读次数:
140
构造函数是实现继承的关键,子类对象在构造时,首先调用父类的构造函数,在调用自己的构造函数。
#include
using namespace std;
template
class A
{
public:
friend T;
private:
A(){}
~A(){}
};
class B:virtual public A...
分类:
编程语言 时间:
2015-03-05 10:49:30
阅读次数:
282
C++要实现一个不能被继承的类有很多方法.使用友元、私有构造函数、虚继承等方式可以使一个类不能被继承,可是为什么必须是虚继承?背后的原理又是什么?
~的构造函数设置为私有的就okay。
因为那样的话,子类就没有办法访问基类的构造函数,从而就阻止了进行子类构造对象的任务实现,也就达到了不可继承的目的。
但是,假设那样,这个类我们在其它地方怎么使用呢?那这样子给...
分类:
编程语言 时间:
2015-01-27 11:17:04
阅读次数:
181
由于c++没有像Java一样有final关键字,在Java中被final关键字修饰的类是不能被继承的,所以使用c++实现不能被继承的类时会比较麻烦。在继承机制中,当调用子类的构造函数时会自动调用父类的构造函数,对于析构函数也是一样,当调用子类的析构函数时会自动调用父类的析构函数。那么,我们可以把构造...
分类:
编程语言 时间:
2015-01-07 20:27:13
阅读次数:
173
http://blog.sina.com.cn/s/blog_69d9bff30100odlz.html在Java 中定义了关键字final ,被final 修饰的类不能被继承。但在C++ 中没有final 这个关键字,要实现这个要求还是需要花费一些精力。首先想到的是在C++ 中,子类的构造函数会自...
分类:
编程语言 时间:
2015-01-03 21:04:53
阅读次数:
260
class?VString{//默认的存取控制方式就是私有
????VString();
????VString(char*);
????VString(string);
????friend?class?String;
};
class?String:virtual?VString{
public:
????Str...
分类:
其他好文 时间:
2014-11-19 02:28:09
阅读次数:
221
??在 C++ 中,子类的构造函数会自己主动调用父类的构造函数。相同,子类的析构函数也会自己主动调用父类的析构函数。要想一个类不能被继承,我们仅仅要把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必定会因为试图调用构造函数、析构函数而导致编译错误。template cla...
分类:
编程语言 时间:
2014-10-13 15:55:39
阅读次数:
179