1.继承可以减少写重复代码
继承语句:class 子类 : 继承方式 父类;其中,子类又叫派生类;父类又叫基类;
#include<iostream>
using namespace std;
class BasePage
{
public:
void header(){
cout<<"首页、公共课、登录、注册...(公共头部)"<<endl;
}
void footer(){
cout<<"帮助中心、交流合作、站内地图...(公共底部)"<<endl;
}
void left(){
cout<<"Java,python,c++"<<endl;
}
};
class Cpp : public BasePage
{
public:
void content(){
cout<<"C++学科内容"<<endl;
}
};
class Python : public BasePage
{
public:
void content(){
cout<<"Python学科内容"<<endl;
}
};
void test01(){
cout<<"以下是c++的学科内容:"<<endl;
Cpp cpp;
cpp.header();
cpp.footer();
cpp.left();
cpp.content();
cout<<"以下是python的学科内容:"<<endl;
Python py;
py.header();
py.footer();
py.left();
py.content();
}
int main(){
test01();
}
2.继承方式-公共继承/保护继承/私有继承
父类中private的东西,不管儿子的继承方式是(public/protected/private)中哪一个,子类都不可以访问;
若儿子的继承方式是public,则父亲的东西在儿子里面不变;
若儿子的继承方式是protected,则父亲的public/protected的东西在儿子这都变成了protected;
若儿子的继承方式是private,则父亲的所有都变成了private;
公共权限:类内类外都可以访问;
保护权限:类内可以访问,类外不可以访问;
私有权限:类内可以访问,类外不可以访问;
3.继承中的对象模型
父类中所有非静态成员的属性都会被子类继承下去;
父类中private成员儿子虽然不能访问,但确实是继承下去了;
4.构造和析构顺序
读取构造函数顺序:先父后子
读取析构函数顺序:先子后父
5.继承同名成员处理方式
访问子类:直接访问
访问父类同名成员:需加作用域
如果子类中出现和父类同名的成员函数,子类的同名成员会隐藏掉父类中所以同名成员函数;
如果想访问到父亲中被隐藏的同名成员函数,需要加作用域;
如:
Son s;
s.m_A; //访问的是儿子的m_A;
s.Base::m_A; //访问的是父类的m_A;
6.继承中非静态同名成员处理方式
1.通过对象访问
Son s;
s.m_A;
s.Base::m_A;
2.通过类名访问
Son::m_A;
Base::m_A; 或 Son::Base::m_A;
7.多继承语法
c++中允许一个类继承多个类
class 子类 : 继承方式 父类1,继承方式 父类2
class Base1
{
public:
int m_A;
};
class Base2
{
public:
int m_A;
};
class Son : public Base1, public Base2
{
public:
Son(){
m_C = 300;
m_D = 400;
}
};
int main(){
Son s;
cout<<"Base1的m_A : "<<s.Base1::m_A<<endl; //同名必须加上作用域区分父类
cout<<"Base2的m_A : "<<s.Base2::m_A<<endl;
}