C++ 为什么有些虚函数是动态有界的,但有些不是? #包括 C类数据库 { 公众: 虚拟空打印数据(int nData=111); }; void CBase::PrintData(int nda/*=111*/) { printf(“CBase::PrintData,nData=%d\n”,nData); } 类别C派生:公共CBase { 公众: 无效打印数据(int nData=222); }; void CDerived::PrintData(int nda/*=222*/) { printf(“CDerived::PrintData,数据=%d\n”,数据); } int main() { c派生的ocd; CBase*pCBase=&oCDerived; pCBase->PrintData(); (*pCBase.PrintData(); oCDerived.PrintData(); 返回0; } 运行并打印: CDerived::PrintData,数据量=111 CDerived::PrintData,数据量=111 CDerived::PrintData,数据量=222
很抱歉我输入了一个错误,因为我想用我自己的代码来测试。 这就是我所困惑的代码。C++ 为什么有些虚函数是动态有界的,但有些不是? #包括 C类数据库 { 公众: 虚拟空打印数据(int nData=111); }; void CBase::PrintData(int nda/*=111*/) { printf(“CBase::PrintData,nData=%d\n”,nData); } 类别C派生:公共CBase { 公众: 无效打印数据(int nData=222); }; void CDerived::PrintData(int nda/*=222*/) { printf(“CDerived::PrintData,数据=%d\n”,数据); } int main() { c派生的ocd; CBase*pCBase=&oCDerived; pCBase->PrintData(); (*pCBase.PrintData(); oCDerived.PrintData(); 返回0; } 运行并打印: CDerived::PrintData,数据量=111 CDerived::PrintData,数据量=111 CDerived::PrintData,数据量=222,c++,C++,很抱歉我输入了一个错误,因为我想用我自己的代码来测试。 这就是我所困惑的代码。 正如所料,pCBase是指向派生类对象oCDerived的基本主题的指针,因此通过pCBase指针调用PrintData()相当于调用派生类对象的PrintData()重写。它应该依次打印222和222。重写方法时,在参数列表后添加上下文关键字override,如下所示: #include<iostream> class CBase { public:
正如所料,pCBase是指向派生类对象oCDerived的基本主题的指针,因此通过pCBase指针调用PrintData()相当于调用派生类对象的PrintData()重写。它应该依次打印222和222。重写方法时,在参数列表后添加上下文关键字
override
,如下所示:
#include<iostream>
class CBase
{
public:
virtual void PrintData(int nData = 111);
};
void CBase::PrintData(int nData /* = 111 */)
{
printf("CBase::PrintData, nData = %d\n", nData);
}
class CDerived : public CBase
{
public:
void PrintData(int nData = 222);
};
void CDerived::PrintData(int nData /* = 222 */)
{
printf("CDerived::PrintData, nData = %d\n", nData);
}
int main()
{
CDerived oCDerived;
CBase* pCBase = &oCDerived;
pCBase->PrintData();
(*pCBase).PrintData();
oCDerived.PrintData();
return 0;
}
run and print:
CDerived::PrintData,nData = 111
CDerived::PrintData,nData = 111
CDerived::PrintData, nData = 222
void prinf()override{coutYou在基类中声明了print()
,但是所有派生类函数都有名为prinf()的函数
。这是实际代码还是键入错误?如果是键入错误,为什么要键入代码而不是从代码编辑器中复制/粘贴准确的代码?这可能会有所帮助:默认参数是根据用于调用方法的指针类型而非多态类型获得的,如链接副本中所述。请记住,派生类型可能是“隐藏的”(例如,通过某些工厂机器),因此编译器将无法“看到”派生类型的默认参数。衷心感谢您的回答。很抱歉,我键入了一个错误,这不是我的意图。我将问另一个问题。我已经编辑了我的代码和问题。
void prinf()override{cout<<"bbb"<<endl;}