C++ 公有继承 【GeekBand 第三周】
2016-05-25 20:22
751 查看
1.类继承
1.1面向对象的类继承,能从已有的类派生出新的类,称派生类;派生类继承了基类的特征、方法,相较于直接修改原代码,更简单,且原基类能重复使用。1.2利用继承可做:修改基类方法以实现不同于基类的功能,添加新的方法以实现新的功能,添加新的数据以满足新功能所需。
1.3继承可以在基类的基础上添加属性但不能删除基类的属性。
2.公有继承
2.1使用公有派生:基类的公有成员将成为派生类的公有成员,基类的私有成员将成为派生类的一部分(也是私有的),只能通过 基类 的公有和保护方法访问。
派生类存储了基类的数据成员,即 派生类继承了基类的实现; 派生类可以使用基类的方法,即 派生类继承了基类的接口。
对派生类而言:需要自身的构造函数,根据功能需要添加新的数据成员和函数成员。
例如:基类:Student(学生),包含数据:name,number,age;包含成员函数:Change_age(),(年龄增长)。
派生类:C_Student(C语言课程学生),继承自Seudent ,添加:新的数据:C_score (C语言成绩),新的方法:C_Test(),(进行考试以获得成绩)。
基类:
class Student { private: int number; int age; string name; public: Student(); void Change_age() { age++; }; };
派生类;
class C_Student: public Student { private: int C_score; public: C_Student(); C_Test() { ...; C_score = xxx; }; };
继承基类的派生类,需注意其构造函数的实现:
由于派生类不能直接访问基类的私有成员,只能通过基类公有方法访问,因此:派生类不能直接设置基类私有成员(name\age\number),只能通过此处基类公有的方法,即:派生类构造函数需使用基类的构造函数来构造基类:
C_Student::C_Student(_):Student(_),C_score(_) {}
其中的 _ 为参数,视具体情况而定。
创建派生类时首先创建基类对象:通过派生类构造函数代码显示调用相应基类构造函数,否则将调用基类的默认构造函数 (Student() ,无参数)。
基类构造函数 应当在 派生类构造函数的 成员初始化列表 中调用,将参数传递给基类构造函数。
过程类似于:
f1(i,j) { ...; f0(i); }
f1()调用f0(),并将f0()所需参数 i 传递给f0(), 只不过对继承而言,f0()应当在初始化列表中使用;
在释放对象时,同样可以用调用来解释:
~f1() { ...; ~f0(); }
~f1() 调用 ~f0(),因此首先执行派生类析构函数,后调用基类析构函数,不过对于继承而言:类似于 ~f1(){ …;}:~f0() 。
2.2派生类和基类间的关系:
基类指针可直接 指向 派生类对象,即可以用派生类对象中的基类对象信息 赋给基类指针,反之不行,不能将派生类指针 指向 基类对象,因为基类对象中没有派生类新添加的信息,不能传递给派生类指针。(对于引用亦如此)
基类指针或引用 指向 派生类对象后,只能用于调用基类方法,不能调用派生类新添加的方法。
形参为 指向基类的指针(基类引用) 的函数,可将基类对象的地址传入,也可以将派生类对象地址传入。
void foo( Student & s ) { std::cout << "Name:" << s.name; }
显示学生姓名,也可以将C语言学生传入,显示C语言学生的姓名。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性