C++ C++;:虚拟函数调用父函数

C++ C++;:虚拟函数调用父函数,c++,polymorphism,C++,Polymorphism,因此,我的容器将无法在手前判断它是否将容纳a、B或C,但其行为仍应不同 有没有一种方法可以实现我预期的功能??ab=b():您正在从B对象使用赋值运算符/复制构造函数(通过复制省略)构造A类型的对象,但被视为对A的引用(这解释了为什么它编译时没有错误) 这不是多态性b仍然是类型A。指向B的链接已丢失 这样做可以: struct A { virtual int operator() (int i); }; struct B : A { int operator() (int i

因此,我的容器将无法在手前判断它是否将容纳
a
B
C
,但其行为仍应不同

有没有一种方法可以实现我预期的功能??

ab=b():您正在从
B
对象使用赋值运算符/复制构造函数(通过复制省略)构造
A
类型的对象,但被视为对
A
的引用(这解释了为什么它编译时没有错误)

这不是多态性<代码>b
仍然是类型
A
。指向
B
的链接已丢失

这样做可以:

struct A
{
     virtual int operator() (int i);
};
struct B : A
{
     int operator() (int i) { return i*2; }
};
struct C : A
{
     int operator() (int i) { return i*3; }
};
struct x
{
     A test;
};
现在

coutfunc()
ab=b():您正在从
B
对象使用赋值运算符/复制构造函数(通过复制省略)构造
A
类型的对象,但被视为对
A
的引用(这解释了为什么它编译时没有错误)

这不是多态性<代码>b
仍然是类型
A
。指向
B
的链接已丢失

这样做可以:

struct A
{
     virtual int operator() (int i);
};
struct B : A
{
     int operator() (int i) { return i*2; }
};
struct C : A
{
     int operator() (int i) { return i*3; }
};
struct x
{
     A test;
};
现在


cout func()C++虚拟函数仅适用于引用/指针,这意味着间接

cout << b->func() << endl;

这将创建类型为A的对象,而不是类型为B的对象。没有间接寻址,因此只调用A中的函数。

C++虚拟函数仅适用于引用/指针,这意味着间接寻址

cout << b->func() << endl;

这将创建类型为A的对象,而不是类型为B的对象。没有间接寻址,因此只调用A中的函数。

谢谢,伙计,但是没有指针就无法实现这一点吗?父对象和子对象都将只是一个包含函数的类,没有变量成员或任何东西。没有指针或引用是不行的。谢谢,伙计,但是没有指针是不行的吗?父对象和子对象都将只是一个包含函数的类,没有变量成员或任何东西。没有指针或引用是不可能的。
A b = B();