C++ 在基类数组中使用子类方法的默认值
有没有什么方法可以C++ 在基类数组中使用子类方法的默认值,c++,arrays,pointers,subclass,default-value,C++,Arrays,Pointers,Subclass,Default Value,有没有什么方法可以cout function()可以改为5吗 目前,它接受基类的默认值并运行子类的方法 但是我希望它运行子类的方法,并获取子类的默认值 类基础 { 公众: 虚int函数(inti=1){return 2;} }; 类别分组:公共基础 { 公众: int函数(inti=5)重写{return i;} }; int main() { 基准*a[2]; a[0]=新的子节点(); cout函数();//给出1 } 您的代码正在通过Basis*指针调用function(),因此它将使用B
cout function()代码>可以改为5吗
目前,它接受基类的默认值并运行子类的方法
但是我希望它运行子类的方法,并获取子类的默认值
类基础
{
公众:
虚int函数(inti=1){return 2;}
};
类别分组:公共基础
{
公众:
int函数(inti=5)重写{return i;}
};
int main()
{
基准*a[2];
a[0]=新的子节点();
cout函数();//给出1
}
您的代码正在通过Basis*
指针调用function()
,因此它将使用Basis
定义的默认值,Sub
无法覆盖该值。通过Sub*
指针调用function()
将使用Sub
定义的默认值
因此,根据您所展示的代码,我能想到的最简单的方法就是使用函数重载,例如:
class Basis
{
public:
virtual int function() { return function(1); }
virtual int function(int i) { return 2; }
};
class Sub : public Basis
{
public:
int function() override { return function(5); }
int function(int i) override { return i; }
};
int main()
{
Basis* a[2];
a[0] = new Basis();
a[1] = new Sub();
cout << a[0]->function(); //gives 2
cout << a[1]->function(); //gives 5
}
类基础
{
公众:
虚int函数(){返回函数(1);}
虚int函数(inti){return 2;}
};
类别分组:公共基础
{
公众:
int function()重写{返回函数(5);}
int函数(int i)重写{return i;}
};
int main()
{
基准*a[2];
a[0]=新基();
a[1]=新的子节点();
cout函数();//给出2
cout函数();//给出5
}
太好了。默认值是由定义设置的,而不是由实现设置的,是在运行时已知的实现。由于a[0]->function()
的定义是针对基类的,因此我以前从未考虑过它,但我可以看出这是多么出乎意料。贝特,标准中有一两个非常漂亮的段落涵盖了这种行为。这里是: