为了扩展原来类的功能,提高代码的复用性
例:
People 人; 讲话, 吃饭
Robot 机器人对象; 飞,跑
A继承了B,A被称为派生类(子类), B被称为A的基类(父类)
class 派生类名字:public 基类名字 //公有继承
class 派生类名字:private 基类名字 //私有继承
class 派生类名字:protected 基类名字 //保护继承
{
}
3.继承以后,派生类究竟可以使用父类的哪些成员
第一种:派生类公有继承父类
父类 | public | private | protected |
---|---|---|---|
派生类(类的外面) | yes | no | no |
派生类(类的内部) | yes | no | yes |
第二种:派生类私有继承父类
父类 | public | private | protected |
---|---|---|---|
派生类(类的外面) | no | no | no |
派生类(类的内部) | yes | no | yes |
第三种:派生类保护继承父类
父类 | public | private | protected |
---|---|---|---|
派生类(类的外面) | no | no | no |
派生类(类的内部) | yes | no | yes |
在派生类中从写基类中的同名方法
派生类名.方法名()//调用派生类中重写的同名方法
派生类名.基类名::方法名()//调用基类中的同名方法
例:
Dog dog;
dog.eat(); //调用子类自己的eat方法
dog.Animal::eat(); //我想调用父类的eat()方法
5.派生类的大小
无论哪种继承方式: 父类所有成员属性+子类自己的成员属性总和
依旧要满足字节对齐
6.继承以后构造函数和析构函数的调用规则构造函数:先构造父类(无论何种情况,默认都是调用父类的无参构造函数),然后再构造子类
如果程序员想要指定调用父类的特定构造函数 -> 可以的
Dog(int newnum,string newstr):Animal(newnum,newstr)//指定要调用父类Animal(newnum,newstr)版本的构造函数
{
cout<<"子类有参构造"<<endl;
}
析构函数:先析构子类,然后再析构父类
二、多继承和多重继承 1.多继承 (1)概念一个类继承了多个类就叫做多继承
(2)语法格式class A:public B,public C
{
代码
};
(3)多继承中构造函数和析构函数的调用规则
构造函数:从左到右依次调用各个父类的构造
析构函数: 从右到左依次调用各个父类的析构
2. 多重继承B和C继承A,然后D继承了B和C(参见图示比较形象)
(1)多重继承遇到的问题问题一: 创建D类对象的时候,A会被构造多次(浪费了存储空间)
问题二: 二义性,通过D去调用A里面的方法有两条途径(一条通过B调用,还有一条通过C调用)
(2)解决两个问题的方法 -> 虚继承虚继承解决
由于B已经构建过一次A的副本,在构建C的时候编译器会去检查区域种A存不存在,存在就不再重复构建A了
语法格式
class 派生类名 : virtual 基类名
class B:virtual public A //A称作B的虚基类
class C:virtual public A
三、static的用法
1.修饰成员属性
特点:
①初始化必须写在类的外面直接初始化
②static修饰的成员属性是所有该类对象共享的(实际开发往往用来在多个对象之间传递数据)
③static修饰的成员属性优先于类的对象而存在(对象还没有创建(栈,堆),static修饰的成员属性已经存在了(原因是它存储静态存储区))
2.修饰成员方法 (1)特点①static修饰的成员方法,可以通过类名直接调用(不需要新建对象),节约空间,方便
②static修饰的成员方法,它里面只能使用static修饰的属性,其他非静态成员不能使用
③static修饰的成员方法中不能使用this指针,因为static修饰的成员优先于对象存在,对象还没有,方法已经在静态存储区中存放了
(2)实际用途在实际开发中,一个类如果是作为工具类来使用,它里面的方法就全部定义成static修饰
工具类:这个类提供了大量的方法给程序员去使用
class PID // 平衡控制算法
{
public:
static void 控制无人机转弯()
{
}
static void 控制无人机平衡()
{
}
};
四、const的用法
c++的语法随着时代在发展:C++11/C++14/C++17
g++ const修饰成员属性.cpp -std=c++11 //告诉编译器,依照C++11特性去编译我的程序
g++ -v //查看编译器的版本
1.const修饰成员变量 (常成员)
特点
const修饰的成员变量只能在构造函数的参数列表中的初始化
一旦初始化完毕,不能用任何函数去修改了
2.const修饰成员方法特点
表示这个成员方法不可以修改任何成员属性的值(可以使用,不能修改)
void show() const//注意const写在函数的后面
3.const修饰对象(常对象)
特点
只能使用类中const修饰的成员方法
const Animal a;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)