Effective C++ .37 virtual函数中默认参数的表现

#include <iostream>

#include <cstdlib>



using namespace std;



class Pen {

public:

    virtual void write(int color = 0) {

        cout<<"write with color:"<<color<<endl;

    }

};



class Pencil : public Pen{

public:

    void write(int color = 128) {

        cout<<"write with color:"<<color<<endl;

    }

};



int main() {

    

    Pen* p = new Pencil();

    

    p->write();

    

    return 0;

}

输出:

write with color:0

 

即虚函数,执行那个函数是运行时决定的,但是其默认参数却是静态决定的,用了什么类型的指针就使用哪套默认参数。

 

因而最好不要再virtual函数中出现默认参数

你可能感兴趣的:(effective)