设为首页 加入收藏

TOP

C++编程开发中不能被继承的类
2017-07-08 10:22:39 】 浏览:9838
Tags:编程 开发 不能 继承

C++编程开发中不能被继承的类,解题思路:

1、C++中的子类构造函数会自动的调用父类的构造函数,子类析构函数会自动调用父类的析构函数。那么把构造和析构函数定义为私有的,就不能被继承了。

2、缺陷:定义为私有函数时,要在类外创建类的对象,只能实现成要么在栈上创建要么在堆上创建。

//因为构造函数和析构函数都为私有的,所以他不能被继承
//缺陷:它只能在堆上生成,不能在栈上生成。
class A
{
public:
	static A& GetObject(int a)
	{
		return *new A(a);
	}
private: //把构造函数声明为私有的
	A(int a)
	{
		_a=a;
	}
	~A()
	{
		delete this;
	}
	int _a;
};

优化:利用虚继承。
//所以用虚继承来实现,可以在堆上创建对象,也可以在栈上创建对象
template 
  
   
class C
{
	friend T;  //友元类型
private:
	C()
	{}
	~C(){}
	int _a;
};
class D:virtual public C
   
     //D是C的友元类型,所以D可以访问C的私有函数,来实现创建对象 { public: D(){} ~D(){} }; //D不能被继承
   
  
1.将C的构造和析构函数定义为私有函数,它不能被继承,因为不会提供一个创建对象的接口,所以它不能在类外使用。

2.把D定义成C的友元类型,D就可以调用C的所有函数,包括私有函数,使用D来创建C的对象时,它可以在堆上创建也可以在栈上创建。

3.同时D不能被继承。假设E继承了D,在调用E的构造函数时,会跳过D而直接调用C的构造函数,因为C的构造函数为私有的并且E不是C的友元类型,所以它不能调用C的构造函数。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++基础知识学习 下一篇C++小游戏开发:2048小游戏

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目