C++:从父实例调用子方法
Posted
技术标签:
【中文标题】C++:从父实例调用子方法【英文标题】:C++ : Calling a child method from parent instantiation 【发布时间】:2014-02-07 10:58:12 【问题描述】:在我的代码中,我实现了这些类:
class A
public:
virtual int fun() return 0;
class B : public A
public:
virtual int fun() return 1;
还有这些功能:
void operation(A a)
printf("%d\n",a.fun());
int main()
B b;
operation(b);
return 0;
如你所见,类B继承了A,并实现了虚拟继承方法fun()
。主类调用一个以 A 为参数的函数,并调用 fun()
方法,参数为 B 对象。
在执行时,我希望打印字符串 "1"
,但它是 "0"
(即使它是传递给 operation()
的 B 对象)。
我需要这样做,因为我有几个 B 类(B1、B2 等...)并且我希望函数 operation()
是通用的。
我不需要在 A 类中实现 operation()
,但是如果我声明 operation()
纯虚拟,编译会在 operation()
处失败,说我无法实例化 A(这是意料之中的)。
我发现很多关于父/子方法调用和继承的话题,但没有一个人准确地谈到这个问题。
有人可以帮我吗?
谢谢。
【问题讨论】:
注意:对于对象的默认构造,您不能使用括号。B b()
不调用B
的默认c'tor,而是声明一个函数b
,它不接受任何参数并返回一个类B
的对象。
这只是我写这个简化代码示例时犯的一个错误
【参考方案1】:
需要通过引用传递对象或者传递指针
void operation(A& a)
因为您是按值传递的,所以派生对象被切片 - 在函数范围内创建了一个 A
类型的新对象。
【讨论】:
既然你这么说,这似乎很明显。现在工作正常,非常感谢^^!以上是关于C++:从父实例调用子方法的主要内容,如果未能解决你的问题,请参考以下文章
应该从父 ViewController 还是子 ViewController 调用 popViewController?