剑指offer三十:用C++设计一个不能被继承的类

当子类从基类继承时会自动调用父类的构造函数和析构函数:

#include<iostream>
using namespace std;

class sealedClass
{
public:
	static sealedClass* getInstance()
	{
		return new sealedClass();
	}
	static void deleteInstance(sealedClass* pInstance)
	{
		delete pInstance;
	}
public:
	sealedClass() 
	{ 
		cout << "base class construct function!"<<endl; 
	}
	~sealedClass() {}
};

class k:public sealedClass
{
public:
	k() 
	{
		cout << "subclass construct functiono!"<<endl; 
	}
};

int main()
{
	k k1;
}

剑指offer三十:用C++设计一个不能被继承的类

当把基类的构造函数和析构函数设为私有成员时,子类继承的时候由于调用不了父类的构造函数和析构函数而导致编译错误 :

剑指offer三十:用C++设计一个不能被继承的类

通过定义公有的静态函数来创建和释放类的实例 :

#include<iostream>
using namespace std;

class sealedClass
{
//通过定义公有的静态函数来创建和释放类的实例
public:
	static sealedClass* getInstance()
	{
		return new sealedClass();
	}
	static void deleteInstance(sealedClass* pInstance)
	{
		delete pInstance;
	}
//通过将类的构造函数和析构函数设为私有成员,从而使该类不能被其它类继承
private:
	sealedClass() 
	{ 
		cout << "base class construct function!"<<endl; 
	}
	~sealedClass() {}
};


int main()
{
	sealedClass* pInstance;
	pInstance = sealedClass::getInstance();
	pInstance->deleteInstance(pInstance);
}

 

相关文章:

  • 2022-12-23
  • 2021-08-12
  • 2021-05-28
  • 2021-05-19
  • 2021-08-28
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-11-30
  • 2021-12-11
  • 2021-07-25
  • 2022-12-23
  • 2022-12-23
  • 2021-11-16
相关资源
相似解决方案