C++ 函数重载

C++ 函数重载,第1张

C++ 函数重载 (参数分别为基类 派生类类型)
#include 

 #include 
 #include 

std::string getClearName(const char* name)
{
    int status = -1;
    char* clear_name = abi::__cxa_demangle(name, NULL, NULL, &status);
    const char* demangle_name = (status==0) ? clear_name : name;
    std::string ret_val(demangle_name);
    free(clear_name);
    return ret_val;
}


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 << getClearName(typeid(a).name()) << std::endl;
    std::cout << a.value << std::endl;
}
void print(B b){
    std::cout << getClearName(typeid(b).name()) << std::endl;
    std::cout << b.value << " " << b.base << std::endl;
}
int main(){
    A a(1);
    B b(1,2);
    print(a);
    print(b);
    return 0;
}

# g++ Overload.cpp -o Overload
# ./Overload
A
1
B
1 2

如果去掉派生类函数

void print(B b){
    std::cout << getClearName(typeid(b).name()) << std::endl;
    std::cout << b.value << " " << b.base << std::endl;
}

那么

# g++ OverloadOne.cpp -o OverloadOne
# ./OverloadOne
A
1
A
1

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/564185.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)

保存