C++ virtual#includeusing namespace std;class base{public:base() { no=1; }virtual void show() { cout

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 05:41:45

C++ virtual#includeusing namespace std;class base{public:base() { no=1; }virtual void show() { cout
C++ virtual
#include
using namespace std;
class base
{
public:
base() { no=1; }
virtual void show() { cout

C++ virtual#includeusing namespace std;class base{public:base() { no=1; }virtual void show() { cout
一方面是和虚函数有关系:虚函数是为了提供多态功能而设计的,多态功能是动态决定的.而非虚函数是静态编译的时候就已经生成了,决定了的.
另外一方面是和你的get函数有关系,你get函数中定义的是一个临时变量temp,这个变量在get函数执行完毕后,实际上已经析构掉了,但是如果是静态编译的内容,虽然变量析构了,但是对应的变量的成员变量的值还是固定的.即指向的地址部分内容应该还是不变的(如果是多线程程序,那么就不一定了).而对于虚函数来说,就不一定了.一旦变量析构,那么对应的内容也就不存在了.
所以,如果你把临时变量增加为static base temp,那么结果也是一样的了.
其实你在编译的时候,编译器会提示你,你使用了一个临时变量返回引用,这个warning就是提示你,可能会得到预知的行为,但不阻碍程序的运行而已.