在友元类中我们知道,一旦在一个类中声明了友元类,那么友元类便拥有了访问该类的所有权限,可以在自己的类中对声明自己的类进行一系列操作。
友元类主要目的是为了拓展友元类的功能,但是友元类的权限未免太多了,有什么办法可以削减其访问权限呢?
继承与派生应运而生;
本篇文章主要介绍如下内容:
1> 公有继承(public)
2> 私有继承(private)
3> 保护继承(protected)
4> 三种继承方式的共同点与差异
5> 派生类的构造函数
6> 多层派生 (存储地址)
7> 多继承 + 虚继承
8> 多继承时派生类的构造函数
9> 多继承时派生类的析构函数
10> 多继承时的同名隐藏原则
11> 一些基本问题 [ review ]
关于public、private与protected:
private: 只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问.
protected: 可以被该类中的函数、子类的函数、以及其友元函数访问,但不能被该类的对象访问
public: 可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问
************************************************************************************************************************************
一:公有继承
1> 公有继承特点:
2> 公有继承示例 (这里的构造函数将在第五点讲到)
class Person{
private:
int age;
string name;
string sex;
public:
Person(int a, string b, string c)
{
age = a; name = b; sex = c;
}
void Print1();
};
void Person::Print1()
{
cout << name << " " << sex << " " << age << endl;
}
class Student2:public Person{
private:
public:
Student2(int a, string b, string c) :Person(a, b, c) {
}
void Print();
};
void Student2::Print(){
cout << "Student2:";
Person::Print1();
}
int main()
{
Student2 S2(25,"Student2","Male");
S2.Print();
S2.Print1();
return 0;
}
这里派生类的对象是可以直接访问基类public成员函数的,但是私有继承则不允许访问:
二:私有继承
1> 私有继承特点
2> 私有继承举例 (将上面的继承方式改为private)
这里我们就可以直接看到私有继承的第三条特点:
一旦继承方式由公有变为私有,使用类的对象访问基类的权限已经被完全抹杀了,本来公有继承还可以访问public数据成员的~
三:保护继承
1> 保护继承特点
2> 保护继承举例
除了第一条不私有继承不同外,其他都是相同的。
【检测部分】
分析下面代码中类B是否有问题,有问题的话说明理由并将其补全(不得修改,只允许添加)