绝不重新定义继承而来的缺省值
一、请看例子
class shape
{
public:
virtual void DoDraw(int n = 200)
{
cout << "parent:" << n << endl;
}
protected:
private:
};
class Tangle :public shape{
public:
void DoDraw(int n = 201)
{
cout << "Tangle:" << n << endl;
}
};
class Circle :public shape{
public:
void DoDraw(int n = 202)
{
cout << "Circle:" << n << endl;
}
};
void main()
{
shape *p = new Tangle;
p->DoDraw();
shape *pc = new Circle;
pc->DoDraw();
system("pause");
}
结果:
并没有得到自己想要的结果这是为什么???在子类的默认参数重新设置的基本上没有什么卵用。
看原文解释:
二、给出的建议
class shape
{
public:
void Draw(int n = 210)
{
DoDraw(n);
}
private:
virtual void DoDraw(int n) = 0;//注意
};
class Tangle :public shape{
private:
void DoDraw(int n)
{
cout << "Tangle:" << n << endl;
}
};
class Circle :public shape{
private:
void DoDraw(int n)
{
cout << "Circle:" << n << endl;
}
};
void main()
{
shape *p = new Tangle;
p->Draw();
shape *pc = new Circle;
pc->Draw();
system("pause");
}
结果:
shape *p = new Tangle;
p->Draw(2019);
shape *pc = new Circle;
pc->Draw(2019);
结果: