4.4.1 语法
继承的最大好处就是减少重复性工作,使代码看起来更加简洁、
语法:class A pubilc B{ }
A类称为子类或者派生类 (特性),B类称为父类或者基类(共性)
#include<iostream>
#include<algorithm>
using namespace std;
class MyClass
{
public:
void school() {
cout << "清华大学" << endl;
}
void marjy() {
cout << "计算机专业" << endl;
}
private:
};
class class1 : public MyClass
{
public:
void banji(){
cout << "1班:人数45" << endl;
}
private:
};
//使用的时候父类方法和子类方法没有区别
void test01() {
class1 p;
p.school();
p.marjy();
p.banji();
}
int main()
{
test01();
return 0;
}
4.4.2继承的三种方式以及区别
继承的三种方式为:pubilc protected private;三种方式均不可访问父类私有成员
pubilc方式并不改变父类成员属性,protected 把父类除私有成员外属性改变为protected属性,private方式把父类所有成员全部变为私有属性。
父子与子类的构造函数与析构函数的顺序:
构造函数先父类再子类,析构函数先子类再父类
4.4.3 继承中同名成员的处理方式
问题:当访问子类与父类出现同名函数的时候,如何通过子类对象,访问子类或者父类的同名函数
- 访问子类同名函数:直接访问
- 访问父类需要加作用域
#include<iostream>
#include<algorithm>
using namespace std;
class MyClass
{
public:
MyClass() {
a = 10;
cout << "注意构造函数顺序:我是父类" << endl;
}
void say() {
cout << "this is father" << endl;
}
int a;
private:
};
class class1 : public MyClass
{
public:
class1(){
a = 100;
cout << "注意构造函数顺序:我是子类" << endl;
}
void say() {
cout << "this is son" << endl;
}
int a;
private:
};
void test01() {
//1.同名成员变量的访问方法
class1 p;
cout << p.a << endl;
cout << p.MyClass::a << endl;
//2.同名成员函数的访问方法
p.say();
p.MyClass::say();
}
int main()
{
test01();
return 0;
}
访问静态同名函数类似
#include<iostream>
#include<algorithm>
using namespace std;
//刚好复习静态成员变量的写法
class MyClass
{
public:
static int b;
private:
};
int MyClass::b = 100;
class class1 : public MyClass
{
public:
static int b;
private:
};
int class1::b = 200;
void test01() {
//1.静态同名成员变量的访问方法
class1 p;
cout << p.b << endl;
cout << p.MyClass::b << endl;
//2.按类名访问
cout << MyClass::b << endl;
cout << class1::b << endl;
cout << class1::MyClass::b << endl;
}
int main()
{
test01();
return 0;
}
补充:多继承,菱形继承(虚基类 virtual )