| 是否父子类 | 函数参数是否相同 | 含有virtual |
|
函数同名 | 是 | 是 | 是 | 覆盖(又叫重写、继承)override,目的就是实现多态 |
是 | 是 | 否 | 隐藏 | |
是 | 否 | 不相关 | 隐藏(符合正常的理解) | |
同一个类中 | 不相同 | 不相干 | 重载overload |
回答两个问题:一是访问谁?二是能否访问?
重载跟面向对象无关,这里不做进一步解释。
下面分两种情况讨论:
一、父类指针指向子类对象
(1) 隐藏明确了指针该访问谁,父类指针实际指向谁就调用谁;
(2) 覆盖体现多态特征,不确定,子类有就调用子类,没有则调用父类。
二、子类指针指向父类对象
如果提示父类不能初始化子类对象,是父类包含的信息太少了。
(1) 若是用derive*D=dynamic_cast<derive*>(&A);强制转换该基类A,则D获取到的是NULL;
(2)所以父类对象必须是指向了子类或是派生类的对象,则D!=NULL, 可见父类A只是一个桥梁。问题转化为上面一的情况。
欢迎访问:http://blog.csdn.net/cuishumao/article/details/10094823
有误解的地方,欢迎大家讨论!