调用派生功能而不是基本C
derived function is invoked instead of base c++
为什么下面的代码在第二个呼叫中调用基类方法?
基类:
class Number{
public:
Number(){}
virtual print(){cout<<"Number"<<endl;}
virtual bool isEqual (Number* number){ cout<<"Base class"<<endl;}
};
派生类:
class Int: public Number{
int member;
public:
Int(int number){ member =number; }
int get Number(){ return member; }
print(){ cout<<"member"<<endl;}
bool isEqual(Int* number){ return member == number->getNumber(); }
};
主要功能:
int main(){
Int i1(3);
Int i2(4);
Number* nPtr = &i1;
nPter->print(); /// prints 3
nPter->isEqual(&i2); /// "Base class"
...
顺便说一句:
i1.isEqual(&i2); /// prints 0 -- works fine
bool(Int*)
与 bool(Number*)
不同,因此您的函数 Int::isEqual
do override Number::isEqual
-相反,它是一个完全独立的函数。
只是想一会一分钟;尝试的替代毫无意义:您的派生类期望有限的参数,但是基本函数的参数较少约束!如果允许您想要的,则可以使用任何 Number
指针来调用nPtr->isEqual
,而派生类不支持!
正确的问题是 convariant 返回类型,但 contravariant 参数。但是,C 不允许违反参数替代者。
相关文章:
- 将带有派生模板的对象传递给接受具有基本模板的对象的功能
- 为什么从基转换为派生提供此功能?
- 扩展基类并在不更改派生类的情况下使用该功能
- 在销毁派生成员之前,在破坏者中调用共同功能
- 派生类中的成员字段别名(无访问器功能)
- 两个派生类(十六进制 二进制)的虚拟功能
- 如何通过功能指针调用派生方法
- 虚拟功能指针指向派生类中的函数
- 接口会议派生的类功能而无需铸造
- 虚拟功能如何在标题,身体和派生类中起作用
- 如何使程序使用功能过载用于派生的类对象
- 返回返回基本或派生CLSS指针的功能值
- 调用派生功能而不是基本C
- 朋友功能是否继承?为什么基类朋友功能在派生的类对象上工作
- 在基类中公开使用功能,并在派生类中私下使用
- 指向派生类的成员功能,而不是派生的(虚拟)函数
- 继承:从基类调用派生的类功能
- 从派生的指针中调用虚拟功能,而无需支付VTable价格
- C 从基类调用派生类功能
- 派生类命名中的虚拟功能