1.继承的基本语法
#include<iostream> using namespace std; class BasePage { public: void header() { cout << "首页 公开课 登陆 注册" << endl; } void footer() { cout << "帮助中心 交流合作 站内地图" << endl; } void left() { cout << "java python c++" << endl; } }; //java页面 继承,避免重复代码,还可以加上自己独特的成员函数 class Java :public BasePage { public: void content() { cout << "java学科视频" << endl; } }; class Python :public BasePage { public: void content() { cout << "Python学科视频" << endl; } }; class CPP :public BasePage { public: void content() { cout << "CPP学科视频" << endl; } }; void test01() { //java cout << "java下载视频页面如下:" << endl; Java ja; ja.header(); ja.footer(); ja.left(); ja.content(); cout << ".............." << endl; //python cout << "Python下载视频页面如下:" << endl; Python py; py.header(); py.footer(); py.left(); py.content(); cout << ".............." << endl; //C++ cout << "C++下载视频页面如下:" << endl; CPP pp; pp.header(); pp.footer(); pp.left(); pp.content(); cout << ".............." << endl; } int main() { test01(); }
2.继承方式
三种继承方式
#include<iostream> using namespace std; class Base1 { public: int m_A; protected: int m_B; private: int m_C; }; //公有继承 class Son1 :public Base1 { public: void func() { m_A = 10;//父类中的公共权限,在子类仍未公共权限 m_B = 20;//父类中的保护权限,在子类中依旧是保护权限 //m_C是父类的私有成员,不可访问 //m_C = 30; } }; class Base2 { public: int m_A; protected: int m_B; private: int m_C; }; //保护继承 class Son2 :protected Base1 { public: void func() { m_A = 100;//父类中公共成员,到子类变为保护权限 m_B = 100;//父类为保护,子类也为保护 //m_C = 100;父类中的私有,子类访问不到 } }; class Base3 { public: int m_A; protected: int m_B; private: int m_C; }; class Son3 :private Base3 { void func() { m_A = 100;//父类中公共成员,到子类中变为 私有成员 m_B = 100;//父类中保护成员,到子类中变为私有成员 /*m_C = 100;*/ //父类中私有成员,子类访问不到 } }; void test01() { Son1 s1; s1.m_A = 100; //类外访问不到保护权限 /*s1.m_B = 200;*/ } void test03() { Son3 s3; //都变为私有成员了,类外访问不到 //s3.m_A; //s3.m_B; //s3.m_C; } void test02() { Son2 s2; //都变为保护权限了,类外访问不到 //s2.m_A; //s2.m_B; }
3.继承中的构造和析构顺序
#include<iostream> using namespace std; class Base { public: Base() { cout << "Base的构造函数调用" << endl; } ~Base() { cout << "Base的析构函数调用" << endl; } }; class Son :public Base { public: Son() { cout << "Son的构造函数调用" << endl; } ~Son() { cout << "Son的析构函数调用" << endl; } }; void test01() { Son s1; } int main() { test01(); }
继承中的同名成员处理
#include<iostream> using namespace std; class Base { public: Base() { m_A = 100; } void func() { cout << "Base - func()调用" << endl; } void func(int) { cout << "Base_fun(int)调用" << endl; } int m_A; }; class Son :public Base { public: Son() { m_A = 200; } void func() { cout << "Son - func()调用" << endl; } int m_A; }; //同名成员属性处理方式 void test01() { Son s; //直接访问同名m_A,是直接访问子类对象 cout << "Son 下 m_A = " << s.m_A << endl; //需要加作用域才可以访问到父类中同名成员 cout << "Base 下 m_A = " << s.Base::m_A << endl; } //同名成员函数处理 void test02() { Son s; //直接调用,是调用子类中的同名成员 s.func(); //调用父类同名成员 要加上作用域 s.Base::func(); //如果子类中出现和父类同名的成员函数,子类的同名成员会颖仓掉父类中所有同名成员函数 //如果想访问到父类中被隐藏的同名成员函数,需要加上作用域 s.Base::func(100); } int main() { /*test01();*/ test02(); }
4.继承中同名静态成员处理(静态成员可以通过类名来访问父类)
#include<iostream> using namespace std; class Base { public: static int m_A; static void func() { cout << "Base - static void func()" << endl; } }; int Base::m_A = 100; class Son :public Base { public: static int m_A; static void func() { cout << "Son - static void func()" << endl; } }; int Son::m_A = 200; void test01() { Son s; //1.通过对象访问: cout << "通过对象访问: " << endl; //直接使用是子类下的静态成员变量 cout << "Son 下 m_A = " << s.m_A << endl; //加上作用域就是父类下的成员变量 cout << "Base 下 m_A = " << s.Base::m_A << endl; //2.通过类名访问 cout << "通过类名访问: " << endl; cout << "Son 下 m_A = " << Son::m_A << endl; cout << "Base 下 m_A = " << Son::Base::m_A << endl; } //同名静态成员函数 void test02() { //1.通过对象访问 cout << "通过对象访问" << endl; Son s; s.func(); s.Base::func(); //2.通过类名访问 cout << "通过类名访问" << endl; Son::func(); Son::Base::func(); } int main() { /*test01();*/ test02(); }
5.多继承语法
此些截图都是来源于黑马程序员,我也只是把写文章当作我自己的笔记而已哈,所以写到我自己能够理解的程度就可以了。