Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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++ - Fatal编程技术网

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;}