【发布时间】:2013-03-21 03:22:44
【问题描述】:
好吧,这是一个让我很困惑的简单例子......
class First { public: void Func() {cout<<"FirstFunc";} };
class Second : public First
{ public: void Func() {cout<<"SecondFunc";} };
class Third : public Second
{ public: void Func() {cout<<"ThirdFunc";} };
int main () {
Third * thirdptr = new Third();
Second * secondptr = thirdptr;
First * firstptr = secondptr;
firstptr->Func(); // prints out FirstFunc
secondptr->Func(); // prints out SecondFunc
thirdptr->Func(); // prints out ThirdFunc
delete thirdptr;
这是带有虚函数的
class First { public: virtual void Func() {cout<<"FirstFunc";} };
class Second : public First
{ public: virtual void Func() {cout<<"SecondFunc";} };
class Third : public Second
{ public: virtual void Func() {cout<<"ThirdFunc";} };
int main () {
Third * thirdptr = new Third();
Second * secondptr = thirdptr;
First * firstptr = secondptr;
firstptr->Func(); // prints out ThirdFunc
secondptr->Func(); // prints out ThirdFunc
thirdptr->Func(); // prints out ThirdFunc
delete thirdptr;
好的,这是我的问题。
如何读取 Third *thirdptr = new Third(); new 在“new int”时为 int 分配内存 但我不知道我应该如何阅读 new Third();因为它是构造函数
第二 * secondptr = thirdptr; / 第一 * firstptr = secondptr; 这两种说法太混乱了。 任何人都可以用 & 运算符或与地址运算符相关的简单词语来解释它吗? 我理解这个指针和继承的概念,但这部分太混乱了。
我应该如何从第二个示例中获得结果? 我正在读的书是在说
第一个例子 // C++ 编译器关于指针算术运算,做出决定 // 基于指针的类型,而不是指针实际指向的内容
第二个例子 // VIRTUAL FUNCTION : 决定,不基于指针类型 //,根据指针实际指向的内容调用什么
这是翻译,可能不准确,但还是看不懂。 如果您能帮助我,我将不胜感激!
【问题讨论】:
标签: c++ function pointers inheritance overriding