84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
我用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),通过虚函数、继承、指针机制来实现动态多态,是通过运行时类的虚表来实现。
没有关系。如 @忆先 的答案。、
但是如果参数分别是父子类型的指针则不行(引用是可以的)。