【发布时间】:2015-04-27 02:02:42
【问题描述】:
#include "stdafx.h"
#include <iostream>
using namespace std;
class Base
{ // Define a base class
public:
virtual void Func1() = 0;
virtual void Func2();
virtual void Func3();
void Func4();
};
class A : public Base
{ // Class A derives from Base
public:
void Func2();
virtual void Func4();
};
class B : public A
{// Class B derives from A
public:
virtual void Func1();
void Func2();
};
class C : public B
{ // Class C derives from B
public:
virtual void Func1();
virtual void Func4();
};
// Base Class Methods
void Base::Func2(){ cout << "Hello from Base::Func2()" << endl;}
void Base::Func3(){cout << "Hello from Base::Func3()" << endl;
Func1(); // DON’T MISS THIS CALL IN YOUR ANSWER
}
void Base::Func4(){ cout << "Hello from Base::Func4()" << endl;}
// Class A Methods
void A::Func2() { cout << "Hello from A::Func2()" << endl; }
void A::Func4() { cout << "Hello from A::Func4()" << endl; }
// Class B Methods
void B::Func1() { cout << "Hello from B::Func1()" << endl; }
void B::Func2() { cout << "Hello from B::Func2()" << endl; }
// Class C Methods
void C::Func1() { cout << "Hello from C::Func1()" << endl; }
void C::Func4() { cout << "Hello from C::Func4()" << endl; }
void TestFuncRef(Base& x)
{
x.Func1();
x.Func2();
x.Func3();
x.Func4();
}
void TestFuncVal(B x)
{
x.Func1();
x.Func2();
x.Func3();
x.Func4();
}
int main()
{
B b;
C c;
TestFuncRef(c);
TestFuncRef(b);
TestFuncVal(c);
}
所以现在我有上面的代码,重点是继承和多态。我需要一些帮助来了解部分输出是如何实现的。
输出是:
Hello from C::Func1()
Hello from B::Func2()
Hello from Base::Func3()
Hello from C::Func1()
Hello from Base::Func4()
Hello from B::Func1()
Hello from B::Func2()
Hello from Base::Func3()
Hello from B::Func1()
Hello from Base::Func4()
Hello from B::Func1()
Hello from B::Func2()
Hello from Base::Func3()
Hello from B::Func1()
Hello from A::Func4()
我不明白 base Func3 和 Base func4 调用之间总是有一些调用。比如下面的
Hello from Base::Func3()
Hello from C::Func1()
Hello from Base::Func4()
和
Hello from Base::Func3()
Hello from B::Func1()
Hello from Base::Func4()
还有人可以向我解释一下 TestFuncRef 和 TestFuncVal 函数是如何工作的吗?我也没有从这些电话中得到输出。非常感谢。
【问题讨论】:
标签: c++ inheritance polymorphism