继承和派生
继承:定义新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。
- 派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。
- 派生类一经定义后,可以独立使用,不依赖于基类。
- 派生类拥有基类的全部成员函数和成员变量,不论是private、protected、public。
- 在派生类的各个成员函数中,不能访问基类中的private成员。
派生类的写法
Class 派生类名 : public 基类名
{
};
派生类对象的体积,等于基类对象的体积,再加上派生类对象自己的成员变量的体积。在派生类对象中,包含着基类对象,而且基类对象的存储位置位于派生类对象新增的成员变量之前。
public继承的赋值兼容规则
1.派生类的对象可以赋值给基类对象,实质是成员变量的赋值。
2.派生类对象可以初始化基类引用
Base & br=d;
3.派生类对象的地址可以赋值给基类指针
Base *pb= &d;
Private 和protected以上不成立。
直接基类与间接基类
- 在声明派生类时,只需要列出它的直接基类
- 派生类沿着类的层次自动向上继承它的间接基类
- 派生类的成员包括
- 派生类自己定义的成员
- 直接基类中的所有成员
- 所有间接基类的全部成员
继承关系和复合关系
继承:“是”关系
- 基类A,B是基类A的派生类
- 逻辑上要求:“一个B对象也是一个A对象”。
复合:“有”关系
- 类C中“有”成员变量K,K是类D的对象,则C和D是复合关系
- 逻辑上要求:“D对象是C对象的固有属性或组成部分”。
派生类中成员与基类同名,可以通过作用域限定符区别。
访问范围说明:
基类的private成员:
- 基类的成员函数
- 基类的友元函数
基类的public成员:都可以访问
基类的protected成员:
- 基类的成员函数
- 基类的友元函数
- 派生类的成员函数可以访问当前对象的基类的保护成员。
测试代码如下:
#include <iostream> #include <string> using namespace std; class Student { private: string name; int age; public: Student(string na, int a) :name(na), age(a) {}; void printIfo() { cout << name<<","; cout << age<<endl; } }; class graduteStudent : public Student { private: bool graduate; public: graduteStudent(string name, int age) :Student(name, age) {}; void printIfo() { Student::printIfo(); cout << graduate << endl; } void SetInfor() { graduate = true; } }; int main() { Student s1("chen", 20); graduteStudent s2("Sonny",21); s2.SetInfor(); s1.printIfo(); s2.printIfo(); s2.Student::printIfo(); return 0; }
参考链接:
https://www.coursera.org/learn/cpp-chengxu-sheji
本人博客已迁往 https://chenlongxiabc.github.io 欢迎访问。
博客内容均为自己编写,其中参考了相关内容。若有侵权他人请联系我,并对此表示歉意。若要转载或是其他用途,请联系我。我的邮箱diegefulan@hotmail.com