C++ 使用运算符重载调用虚拟函数

C++ 使用运算符重载调用虚拟函数,c++,inheritance,operator-overloading,virtual,C++,Inheritance,Operator Overloading,Virtual,我希望有一个类,可以从中继承并覆盖为[]运算符创建值的函数。为什么这些结果不一样?有没有办法不使用指针就得到第二个结果 代码: 这意味着“创建一个新的session对象,并从s2的值初始化它”。请注意a是一个session对象,而不是session2对象。因此,它的虚拟方法将使用“父”的定义。因此,运行时多态性只能通过引用和指针工作,而引用和指针不会创建新对象。它们只是引用现有对象。如果不想使用指针,请使用引用 session2 s2; session& a = s2; 如果不使用指

我希望有一个类,可以从中继承并覆盖为[]运算符创建值的函数。为什么这些结果不一样?有没有办法不使用指针就得到第二个结果

代码:


这意味着“创建一个新的
session
对象,并从
s2
的值初始化它”。请注意
a
是一个
session
对象,而不是
session2
对象。因此,它的虚拟方法将使用“父”的定义。因此,运行时多态性只能通过引用和指针工作,而引用和指针不会创建新对象。它们只是引用现有对象。

如果不想使用指针,请使用引用

session2 s2;

session& a = s2;
如果不使用指针或引用,将进行切片,并且将丢失有关派生对象的所有特殊信息。将只保留父级中的零件


在此处阅读有关切片的更多信息:

否。您可以将操作符设置为虚拟。
parent called
child called
session a = s2;
session2 s2;

session& a = s2;