以下大部分纯属是个人按自己的理解,大部分是胡扯的
1,公用继承,保护继承,私有继承
A,对于类之间的关系:有3个类,one,two,three,two继承自one,three继承自two。对于two而言,无论是公用还是私有继承自one,one里的private都是不可见的,public与protected都是可见的。当然,three对于two也是一样,但是当two是private继承自one时,three是看不到one里的任何成员的。而two是public和protected继承自one时,three是可以使用one的protected和public变量的。如果存在four继承自three,那以上规则是可以通用的。
B,对于对象时:还是一样的三个类,首先对象是只能使用类的public成员的,所以只要讨论public是否看见,当two公有继承自one时,two的对象是可以看见one的public成员的,其他情况均不看见且以此类推。
2,类是什么
类是一种数据结构,和struct一样。类有很多规则,而这些规则都是为了处理不同数据情况而准备的,public private 或者是virtual,都是为了处理某一类情况。始终要记得类是为了处理数据而存在,而它的规则是为了分情况处理数据。
多个类之间,无论如何继承,它相对于对象都是一个抽象的东西,即,一些抽象东西在按一些规则达到一些效果,当然,对象与这个抽象东西也存在一些规则,从而达到某些处理某些情况的效果。
3,多态
基类指针指向子类对象时,调用同名函数。如果同名函数没有virtual,那调用的就是基类的函数(即,由指针决定),有virtual调用子类的函数(由对象决定)。基类指针指向子类对象且调用函数时,是这样的,首先内存块是由对象来决定的,所以会有一个包含了基类和子类的对象块,有virtual时则覆盖为一个函数,没有就保留2个函数,这样该规则就处理了2种数据调用的情况。
4,抽象类
抽象类一定有纯虚函数,如果子类没有重写纯虚函数,则默认继承改纯虚函数,从而也为抽象类,抽象类不能创建对象。
子类中的函数如果名字与参数与基类虚函数一样,则默认会变成虚函数,也就是说,只要你重写虚函数,那子类的重写的函数也会变成虚函数,重写虚函数使用override(不写好像也行)。
4,析构函数,构造函数
子类对象自动调用基类与子类的构造函数和析构函数,调用顺序为,创建对象时,调用先基类构造函数,再调用子类构造函数。销毁对象时,先调用子类析构函数,再调用基类析构函数。即:基类构造,子类构造,子类析构,基类析构。