gpt4 book ai didi

C++虚函数简单例子

转载 作者:太空狗 更新时间:2023-10-29 19:51:22 26 4
gpt4 key购买 nike

试图快速了解 virtual 函数的工作原理,但不确定为什么下面的代码不打印任何输出。据我所知,由于 moveMouth()virtual,它应该使用 talk< 中的 moveMouth() 版本 类。

/*
* main.cpp
*
* Created on: Mar 29, 2015
* Author: Admin
*/

#include <iostream>

using namespace std;

class talk{

public:

int a=5;
void moveMouth(){
cout <<"blah blah blah"<<endl;
}
};

class person : public talk {

public:
int id;
person(int a): id(a) {

}

virtual void moveMouth(){
//cout <<"word word word"<<endl;
}


};

int main(){
person* p = new person(0);
p->moveMouth();
return 0;
}

最佳答案

As far as I know, since moveMouth() is virtual, it should use the version of moveMouth() in the talk class.

不,这不是多态性的工作原理。它允许您在基类中使用时在派生类中引入不同的行为。

您的示例从 person 类中调用了 moveMouth() 的空实现。

要调用基类版本,只需省略派生类中的声明:

class person : public talk {
public:
int id;
person(int a): id(a) {

}

// Completely omit this if you want to call the base class function by default:
// virtual void moveMouth(){
//cout <<"word word word"<<endl;
// }
};

要允许更改行为,您必须在基类中将函数声明为 virtual:

class talk{

public:

int a=5;
virtual void moveMouth(){
// ^^^^^^^
cout <<"blah blah blah"<<endl;
}
};

继承层次结构中的多态行为从您首次引入 virtual 函数开始。


顺便说一句:
这样可以更好地展示多态行为

int main(){
talk* t = new person(0);
t->moveMouth();
return 0;
}

关于C++虚函数简单例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46864113/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com