C++ 函数重载的时候,参数可以用父类类型和子类类型重载吗?
黄舟
黄舟 2017-04-17 15:31:56
0
3
762

我用C++编程的时候需要对函数进行重载,使函数拥有不同的参数类型,分别是父类类型和子类类型,这样用重载会不会有问题?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
Ty80

可以的,例如这段代码。

#include <iostream>
class A{
    public:
    int value;
    A(int x):value(x){};
};
class B:public A{
    public:
    int base;
    B(int x, int y):A(x),base(y){};
};
void print(A a){
    std::cout << a.value << std::endl;
}
void print(B b){
    std::cout << b.value << " " << b.base << std::endl;
}
int main(){
    A a(1);
    B b(1,2);
    print(a);
    print(b);
    return 0;
}

输出的就是

1
1 2
洪涛
  1. 可以的,c++重载(overload)是通过在把源文件编译成目标文件时对函数名进行重命名来实现,编译器会根据调用函数时传入的参数来决定调用你重载那个具体函数,这个是编译阶段完成的,也就是c++所谓的静态多态。

  2. c++中还有重写(override),通过虚函数、继承、指针机制来实现动态多态,是通过运行时类的虚表来实现。

伊谢尔伦

没有关系。如 @忆先 的答案。、
但是如果参数分别是父子类型的指针则不行(引用是可以的)。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板