coding style 101
虚函数不重载。
默认参数相当于重载。
【 在 libgcc (巭孬嫑夯昆勥茓) 的大作中提到: 】
: 标 题: 当virtual遇上default parameter
: 发信站: 水木社区 (Tue Nov 17 22:59:14 2020), 站内
:
:
https://stackoverflow.com/a/3533692:
: 这个挺有意思的,重写虚函数顺便重写了默认参数的值
: 结果调用的时候默认参数是编译的时候定的,函数是运行的时候定的
: 一不留神可能又是一个坑啊
:
: #include <string>
: #include <sstream>
: #include <iostream>
: #include <iomanip>
:
:
: using std::stringstream;
: using std::string;
: using std::cout;
: using std::endl;
:
: struct Base { virtual string Speak(int n = 42); };
: struct Der : public Base { string Speak(int n = 84); };
:
: string Base::Speak(int n)
: {
: stringstream ss;
: ss << "Base " << n;
: return ss.str();
: }
:
: string Der::Speak(int n)
: {
: stringstream ss;
: ss << "Der " << n;
: return ss.str();
: }
:
: int main()
: {
: Base b1;
: Der d1;
:
: Base *pb1 = &b1, *pb2 = &d1;
: Der *pd1 = &d1;
: cout << pb1->Speak() << "\n" // Base 42
: << pb2->Speak() << "\n" // Der 42
: << pd1->Speak() << "\n" // Der 84
: << endl;
: }
:
:
: --
:
: ※ 来源:·水木社区 newsmth.net·[FROM: 171.83.7.*]
--
FROM 76.126.252.*