C++语法系列之12--默认参数总结

这周忙成狗,大补几篇总结。
继续战斗!

C++中子类与超类的方法可以有不同的默认参数,但是使用的默认参数取决于声明的变量类型,而不是底层实际的对象类型。

class Super {
public:
    virtual void go(int i = 1) {
        cout << "super go i = " << i << endl;
    };
};

class Sub : public Super {
public:
    void go(int i = 8) {
        cout << "sub go i = " << i << endl;
    }
};

int main(int argc, const char * argv[]) {
    Super mySuper;
    Sub mySub;
    Super& mySuperRefToSub = mySub;
    mySuper.go();
    mySub.go();
    mySuperRefToSub.go();
    return 0;
}

运行结果如下:

super go i = 1
sub go i = 8
sub go i = 1

从上面的运行结果可以看到:C++根据描述对象的表达式类型绑定默认参数,而不是根据实际的对象类型绑定参数。所以默认参数不会继承。

你可能感兴趣的:(C++语法系列之12--默认参数总结)