84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我用C++编程的时候需要对函数进行重载,使函数拥有不同的参数类型,分别是父类类型和子类类型,这样用重载会不会有问题?
人生最曼妙的风景,竟是内心的淡定与从容!
可以的,例如这段代码。
#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
可以的,c++重载(overload)是通过在把源文件编译成目标文件时对函数名进行重命名来实现,编译器会根据调用函数时传入的参数来决定调用你重载那个具体函数,这个是编译阶段完成的,也就是c++所谓的静态多态。
c++中还有重写(override),通过虚函数、继承、指针机制来实现动态多态,是通过运行时类的虚表来实现。
没有关系。如 @忆先 的答案。、但是如果参数分别是父子类型的指针则不行(引用是可以的)。
可以的,例如这段代码。
输出的就是
可以的,c++重载(overload)是通过在把源文件编译成目标文件时对函数名进行重命名来实现,编译器会根据调用函数时传入的参数来决定调用你重载那个具体函数,这个是编译阶段完成的,也就是c++所谓的静态多态。
c++中还有重写(override),通过虚函数、继承、指针机制来实现动态多态,是通过运行时类的虚表来实现。
没有关系。如 @忆先 的答案。、
但是如果参数分别是父子类型的指针则不行(引用是可以的)。