C++ virtual

学习 时间:2026-04-09 09:21:55 阅读:6543
C++ virtual#includeusing namespace std;class base{public:base() { no=1; }virtual void show() { cout

最佳回答

平淡的斑马

无辜的香烟

2026-04-09 09:21:55

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

最新回答共有2条回答

  • 儒雅的老鼠
    回复
    2026-04-09 09:21:55

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

上一篇 Do you know the reason ( )she got so angry yesterday?

下一篇 歌曲 一直重复着 :if you want me,if you believe me,if you love me ,i