好的,这是一个简单的例子,让我很困惑......
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;
好的,这是我的问题。
我怎么读第三 * thirdptr = new Third(); new 在“new int”时为 int 分配内存,但我不知道应该如何读取 new Third(); 因为它是构造函数
第二 * secondptr = thirdptr; / 第一 * firstptr = secondptr; 这两种说法太混乱了。任何人都可以用 & 运算符或与地址运算符相关的简单词语来解释它吗?我理解这个指针和继承的概念,但这部分太混乱了。
我应该如何从第二个示例中获得结果?我正在读的书说
对于第一个示例 // C++ 编译器关于指针算术运算,做出决定 // 基于指针的类型,而不是指针实际指向的内容
对于第二个示例 // 虚拟功能:决定,而不是基于指针类型 //,根据指针实际指向的内容来调用什么
这是翻译,可能不准确,但还是看不懂。如果您能帮助我,我将不胜感激!