该系列文章主要整理了C++相关的知识点。对我个人而言,学习C++是为了能阅读理解Android源码里的C++代码,进而理解Android系统为什么要使用C++,并且是如何利用C++实现特定功能的。在Android实战中加深对C++的理解,边学边用,这样学习的效率才是最高的。
参考:
《韦东山第4期教学视频-Android-C++快速入门-第3课第1节_c++面向对象编程_访问控制和继承》
《C++语言程序设计(第3版本)》郑莉,大学入门教材,浅显但是有些知识点解释不清楚。
代码:
https://github.com/wuweidong0107/cpp_projects
10th_inheritance目录
一、了解继承
面向对象编程的4大核心:抽象、封装、继承、多态。前面已经初步接触到抽象和封装,现在来感受一下继承。面向对象编程,是为了尽量描述和解决现实世界的问题,而现实世界里,不同事物之间是相互联系的。继承便是众多联系中的一种,例如汽车和自行车都继承于交通工具,也可以说交通工具派生出汽车和自行车。
看下面这个例子:
person.cpp
class Person {
private:
char *name;
int age;
public:
Person(char *name, int age)
{
cout <<"Pserson(char*, int), name = "<", age= "<endl;this->age = age;this->name = new char[strlen(name) + 1];strcpy(this->name, name);
}
~Person()
{
cout <"~Person()"<<endl;if (this->name) {
cout <"name = "<endl;delete this->name;
}
}void setName(char *name){
if (this->name) {
delete this->name;
}this->name = new char[strlen(name) + 1];strcpy(this->name, name);
}int setAge(int a){
if (a 0 || a > 150)
{
age = 0;return -1;
}
age = a;return 0;
}void printInfo(void){
cout<<"name = "<", age = "<endl;
}
};class Student : public Person {
};int main(int argc, char **argv){
Student s;
s.setName("zhangsan");
s.setAge(16);
s.printInfo();
}
现实世界里,Student属于Person的一种,为了重用Person里的代码,我们在程序里让Student继承了Person,此时称Person类是Student类的基类(或父类),或者反过来说,student类是Person类的派生类(或子类)。Student继承了Person后,就自动地获得了Person的setAge和setName的属性。
C++中,有3种继承方式:
public;
protected;
private,如果不显示给出继承方式,则认为是私有继承;
从基类继承