行业知识
【C++】继承
2026-10-20 20:19:09
来源:互联网转载
目录
- 一、概念及定义
- 1.1 概念
- 1.2 定义
- 1.3 继承方式与访问权限
- 二、基类与派生类对象的赋值转换
- 三、继承中的作用域
- 四、派生类的默认成员函数
- 五、继承与友元
- 六、继承与静态成员变量
- 七、菱形继承与菱形虚拟继承
- 八、���承与组合
一、概念及定义
1.1 概念
以前我们的接触过函数复用,而继承就是一种类复用,减少代码的重复性。继承可以在原有类的基础上扩展新的功能,产生新的类叫派生类或子类,原有类叫基类或父类。比如说学生类和老师类,它们共同的成员变量有名字和年龄,这时就可以写个Person类来处理公共的成员变量,不需要学生类和老师类自己再写名字和年龄的成员变量,只要写自己的独有的那部分即可。
1.2 定义
继承的写法:
class B : public A
B是子类,A是父类,中间要加冒号,public是继承方式(继承方式有3种)
如果是多继承:用逗号分开
class C : public A, public B
看下面代码:
class Person{public:void Print(){cout public:private:int _stuid;};class Teacher :public Person{public:private:int _jobid;};int main(){Student s;s.Print();return 0;}public:protected:string _name = "yss";int _age = 19;};class Student : public Person{public:void Print(){cout public:void Print(){cout public:void Print(){Person::Print();cout public:Person(const char* name):_name(name){cout public:Student(const char* name, const int num):_num(num), Person(name)//调用父类的构造函数{cout Student s("yss", 122);return 0;}cout cout if (this != &p){_name = p._name;cout if (this != &s){_num = s._num;Person::operator=(s);cout cout Person::~Person();cout public:friend void display(const A& a, const B& b);protected:int _a = 10;};class B :public A{public:protected:int _b = 20;};void display(const A& a, const B& b){cout A aa;B bb;display(aa, bb);return 0;}public:A(){count++;}static int count;};int A::count = 0;class B :public A{public:B(){count++;}};int main(){B b;cout public:string_name;};class Student :public Person{protected:int _stuid;};class Teacher :public Person{protected:int _jobid;};class Mine :public Student, public Teacher{protected:int _age;};int main(){Mine m;m._name = "yss";return 0;}public:int _a;};class B : public A{public:int _b;};class C :public A{public:int _c;};class D :public B, public C{public:int _d;};int main(){D dd;dd.B::_a = 1;dd.C::_a = 2;dd._b = 3;dd._c = 4;dd._d = 5;return 0;}