一、派生类的默认成员函数专题
1.1 实现一个不可继承类
1.1.1 间接实现:【C++98】构造函数私有的类不能被继承
基类的构造函数私有,派生类的构成必须调用基类的构造函数。但是基类的构造函数私有化以后,派生类看不见就不能调用了,那么派生类就无法实例化出对象。
1.1.2 直接实现:final 关键字修改基类
C++11 新增了一个 final 关键字,final 修饰基类,派生类就不能继承了。
1.1.3 代码实现
// 设计一个不能被继承的类
class Base final {
public:
void func5() { cout << "Base::func5" << endl; }
protected:
int a = 1;
private:
// 构造函数私有的类不能被继承
Base() {}
};
class Derive : public Base { };
int main() {
Derive d;
return 0;
}
1.1.4 final 关键字
final 充当了两个作用:
- 直接实现一个不能被继承的类(继承篇涉及知识点);
- 不让重写基类虚函数(多态篇涉及知识点)。
二、继承体系中的友元关系
2.1 友元与继承的关系特性
友元关系不能继承。也就是说基类友元不能访问派生类私有和保护成员。
2.2 解决方案
把派生类也变成基类友元的友元即可。
2.3 实战
2.3.1 正确代码演示
class Student;
class Person {
public:
// 友元关系不能被子类继承
friend ;
:
string _name;
};
: Person {
;
:
_stuNum;
};
{
cout << p._name << endl;
cout << s._stuNum << endl;
}
{
Person p;
Student s;
(p, s);
;
}


