C++当⼦类的⽅法和⽗类的⽅法重名时...
C++当⼦类的成员函数与⽗类的成员函数重名时:
若⽗类没有virtual声明,⼦类函数可以和⽗类函数返回值不同,但函数名和参数列表必须相同.
则⼦类实例通过"."调⽤的是⼦类的函数
若⼦类想调⽤⽗类的函数,则需要使⽤⼦类实例.⽗类::函数名() 的形式.
指针调用成员函数⽗类实例通过"."调⽤的是⽗类的函数
⽗类⽆法调⽤⼦类的同名函数
若通过指针->调⽤
则指针的类型决定调⽤哪个类的函数
⽗类地址强制转换为⼦类指针也可以调⽤⼦类的函数.
若⽗类有virtual声明,
虚函数就固定了函数的形式,所以⼦类函数和⽗类函数的返回类型也必须⼀致,否则报error: conflicting return type specified for ‘virtual int CDerive::show()’
则通过"."调⽤时,
⼦类实例调⽤⼦类函数,⽗类实例调⽤⽗类函数.
若通过"->"调⽤时,
则多态性成⽴,即当使⽤基类指针通过->调⽤时,根据指针的内容确实是基类地址还是⼦类地址,分别调⽤对应的函数.⼦类地址赋给⽗类指针,默认调⽤的是⼦类的函数,但可以通过⽗类指针->⽗类::函数名()  明确调⽤⽗类的函数.
当⽤⼦类指针通过->调⽤时,将⽗类地址强制转换为⼦类指针,则默认调⽤的仍然是其本质的函数即⽗类的函数可以通过⼦类指针->⼦类名::函数名() 强制调⽤⼦类的函数.
将⼦类指针指向⼦类实例地址时,默认调⽤⼦类函数,可以通过⼦类指针->⽗类名::函数名() 强制调⽤⽗类的函数.
当参数不⼀样时,则是两个函数,
此时通过->调⽤函数取决于指针变量的类型决定调⽤哪个函数⽽与其实质值⽆关.
⼦类类型的指针可以通过⼦类指针->⽗类名::函数名() 强制调⽤⽗类函数.

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。