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;