题目:
题目很简单,就是创建一个不能够被继承的类,同时能够正常使用。
思路:
- 题目分为两部分组成,第一个是不能被继承的类。类如果要不能被继承,那么子类肯定不能够调用基类的构造函数或者析构函数。那么我们只要将构造函数或析构函数定义为私有成员函数就好了。
- 第二个要求,能够正常使用,这样显然之前的方式是行不通的。构造函数为私有了,就无法创建对象了。那我再给他加一个友元函数,这样对象也可以创建了。
- 可是题目的要求是正常使用这个类,显然通过一个友元函数是不符合我们正常使用类的方式。
- 这个时候,正真正确的思路就出来了。我们借用一个中间类。例如:我们不能被继承的类是man,我们创建一个 私有构造函数的父类person,同时将 man定义为person的友元类。这样man就可以正常访问person的私有构造函数了。接着我们让 man虚继承person,到这里我们就完成了这个题目。
- 让man虚继承person是为了让继承man的类,都需要在man的父类,即person中调用构造函数,但只有man是person的友元类,其他的类都不能访问person的构造函数。因此man就成为了不能被继承的类,而man本身可以正常使用。
代码如下:
include <iostream>
using namespace std;
//设计一个不能被继承的类
class person{
public:
friend class man;
private:
//构造函数为private
person(){}
};
//man虚拟继承person
class man:virtual public person {
public:
man(){
age = 18;
}
void show(){
cout << age << endl;
}
private:
int age;
};
// class son:public man{
// public:
// son(){}
// };
int main(){
man bob;
system( "clear" );
bob.show();
//son tom;
return 0;
}
不定义man的继承类son,正常输出man的age = 18
定义man的继承类son失败