继承本身是承接父类的属性方法,同时添加自己的独有的属性和方法。 当有需要的时候,她就可以通过函数重载的方式来从新定义基类的方法。
函数的实现:基类和子类都有自己的函数的实现。
构造函数:继承,基类和子类都有各自的构造函数。
多态,虚函数这一些,其实是为了迎合一个需求:使用基类的地址,去操作子类的成员。只有用地址的时候,猜可以,因为使用地址,编译器无法知道具体的对象的类型,所以无法。如果是使用对象本身,而不是使用指针。那就没必要了。
多态,本身是继承的延续,继承的时候,如果我们要使用基类,就使用基类来定义对象,然后用这个对象来操作这个基类。
如果我们想要子类,那么们就用子类来定义对象。但是如果我们想使用基类的地址,来操作子类,那么就需要用到多态。这个仅仅是为编程的方便。
这个时候,我们需要把相关的函数定义为虚函数。
函数的实现: 虚函数再基类和子类中都有各自的实现,
构造函数:含有虚函数的类本质上也是继承,基类和子类都有各自的构造函数。
总结一下,虚函数只是继承的一种特殊情况。
如果是普通的继承,基类A,函数func 子类B 函数func(重载)
我们定义一个A,调用函数A.func 执行的是A.func
定义一个B,调用函数B.func,执行的是B.func
如果是定义类一个B,然后用A的地址来访问他,比如函数test (A a){a.func} 传递了一个参数B b。那么真正执行的,还是A.func
===============================================================================
如果说一个基类只是提供一个接口,而不希望使用者创建一个你提供的类的实现。那么,就需要抽象类。只要把类的至少一个函数,设定为纯虚函数,就可以了。
所以对于我的抽象类基类来说,
纯虚函数,不需要实现。
构造函数,不需要实现,构造函数的存在当然还是必须的,因为需要为类设置虚函数表。我们就让编译器使用默认构造函数就好了。
而对于基于我这个抽象类的子类来说,我需要实现虚类类子
====================================================================
抽象类的纯虚函数,本身是虚函数,其意义和普通的虚函数一样,是为了可以使用基类的指针统一调用子类。
因为抽象类,存在的意义就是为各个不同的子类,创造一个统一的接口,但是子类的具体实现是不同的。抽象类本身不会也不能创建一个对象出来。
因此,我们不去实现抽象类的纯虚函数,或者实现为,打印出错误信息。
这边只看抽象类的纯虚函数,因为抽象类存在的意义就是创造一个接口。有普通的函数和普通虚函数的意义都不大。
所以我的抽象类,纯虚函数,都实现为打印错误信息即可。
阅读(649) | 评论(0) | 转发(0) |