面向对象(继承)
1、继承的作用
(1) 减少冗余代码
使用继承之前:
class IndexPage { public: void header() { cout << "显示头部" << endl; } void footer() { cout << "显示底部" << endl; } void body() { cout << "显示首页的主体内容" << endl; } }; class NewsPage { public: void header() { cout << "显示头部" << endl; } void footer() { cout << "显示底部" << endl; } void body() { cout << "显示新闻的主体内容" << endl; } }; class ProductPage { public: void header() { cout << "显示头部" << endl; } void footer() { cout << "显示底部" << endl; } void body() { cout << "显示产品页面的主体内容" << endl; } };
使用继承之后:
// 公共的函数或者数据 class CommonPage { public: void header() { cout << "新式的显示头部" << endl; } void footer() { cout << "新式的显示底部" << endl; } }; // IndexPage 子类(派生类) CommonPage 父类(基类) // 继承发生时,子类会继承父类的函数、变量 class IndexPage : public CommonPage { public: void body() { cout << "显示首页的主体内容" << endl; } }; class NewsPage : public CommonPage { public: void body() { cout << "显示新闻的主体内容" << endl; } }; class ProductPage : public CommonPage { public: void body() { cout << "显示产品页面的主体内容" << endl; } }; void test01() { // 1. 减少冗余代码,复用代码 IndexPage index; index.header(); index.body(); index.footer(); NewsPage news; news.header(); news.body(); news.footer(); ProductPage product; product.header(); product.body(); product.footer(); }
(2) 扩展类
(3) 修改类
// 2. 可以修改已有类的功能,而不需要修改源代码 class MyFunctions { public: void function01() { cout << "功能01" << endl; } void function02() { cout << "功能02" << endl; } }; // 如果一个类内部的函数,不满足我们的需要,需要修改该函数的功能。 // 1. 修改源代码 2. 既要修改功能,又不能修改源代码。(开闭原则:扩展功能可以通过增加代码完成,而不是修改源代码) class NewFunction : public MyFunctions { public: void function02() { cout << "新修改的功能02" << endl; } }; void test02() { NewFunction nf; nf.function01(); nf.function02(); } class NewFunctionEx : public MyFunctions { public: void function03() { cout << "功能03" << endl; } }; // // 3. 继承扩展类的功能 void test03() { NewFunctionEx nf; nf.function01(); nf.function02(); nf.function03(); }
2、继承中的权限
继承中同样会有private、public、protected三种权限:
(1)、Private 类外不能访问,子类中同样也不能访问。
(2)、Public 类外可以访问,子类也可以访问。
(3)、Protected类外不可以访问,子类可以访问、
扩展理解:子类能不能访问,比如子类能不能继承该权限的成员?
Pulic和protected权限的成员,子类才可以继承。而类内内部成员的权限决定了,子类能否继承该权限。
3、继承方式
继承方式决定了被继承下来的成员在子类中是什么权限:
(1)、如果是Public继承方式,成员在父类中是什么权限,在子类中仍然是什么权限。
(2)、如果是private继承方式,成员在父类中无论是什么权限,在子类中会全部变成私有权限。
(3)、如果是protected继承方式,会根据父类中成员的权限来继承,如果成员在父类中是public,在子类变成protected,如果原来就是protected,那么到子类就不改变,依然是protected。
如果没有特殊需求,我们就使用public继承方式。若没有写继承方式,默认为私有继承。