C++基础第七弹
2.C++继承
-
继承允许我们依据另一个类来定义一个类
-
继承代表了 is a关系
//基类 class Animal{ }; //子类 class Dog:public Animal{ };
-
语法:
class 子类名:访问修饰符 父类名{ };
访问控制和继承
- 子类可以访问父类中所有的非私有成员,因此父类成员如果不想被子类的成员函数访问,则就在父类中声明为private
访问 | public | protected | private |
---|---|---|---|
同一个类 | yes | yes | yes |
派生类 | yes | yes | no |
外部的类 | yes | no | no |
- 子类继承了所有的父类方法,但有一些情况除外:
- 父类的构造函数、析构函数、拷贝构造函数
- 父类的重载运算符
- 父类的友元函数
继承类型
- 公有继承(public):当一个类派生自公有基类时,基类的公有成员也是派生类的公有成员,基类的保护成员也是派生类的保护成员,基类的私有成员不能直接被派生类访问,但可以通过调用基类的公有和保护成员来访问。
- 保护继承(protected): 当一个类派生自保护基类时,基类的公有和保护成员将成为派生类的保护成员。
- 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。
多继承
-
多继承就是一个子类可以有多个父类,继承了多个父类的特性
class 子类名:访问修饰符 父类名1,访问修饰符 父类名2, ......{ 子类代码块; };
//
// Created by 16690 on 2024/4/22.
//
#include <iostream>
using namespace std;
class Shape{
public:
void setWidth(int wid){
width = wid;
}
void setHeight(int hei){
height = hei;
}
protected:
int width;
int height;
};
class PaintCost{
public:
int getCost(int area){
return area * 70;
}
};
class Rectangle:public Shape,public PaintCost{
public:
int getArea(){
return (width * height);
}
};
int main(void){
Rectangle rectangle;
int area;
rectangle.setWidth(10);
rectangle.setHeight(20);
area = rectangle.getArea();
cout << "Total area: " << area << endl;
int cost;
cost = rectangle.getCost(area);
cout << "cost: " << cost << endl;
return 0;
}
- 构造函数调用顺序:基类 > 成员类 > 派生类;
- 多继承派生类: 基类构造顺序 依照 基类继承顺序调用
- 类成员:依照 类成员对象 定义顺序 调用成员类构造函数