c++父类子类同名变量

来源:互联网 发布:手机拍摄淘宝视频 编辑:程序博客网 时间:2024/05/22 16:56

当父类与子类有同名且变量时:

class Base  {  public:  int i;  Base()  {  printf("Base()\n");  i = 99;  amethod();  }  void amethod()  {  printf("Base.amethod()\n");  }  };  class Derived : public Base  {  public:  int i;  Derived() {  printf("Derived()\n");  i = -1;  }  void amethod()  {  printf("Derived.amethod()\n");  }  };  int main(int argc, char *argv[])  {  Base *b = new Derived(); //Derived *b = new Derived();printf("%d\n",b->i);printf("%d\n",((Derived*)b)->i);b->amethod();return 0;}
输出结果为:

Base()

Base.amethod()

Derived()

99

-1

Derived.amethod()

"b->i"指向的是父类的i,而"((Derived*)b)->i"指向的是子类的i。由此可见字符类中有同名成员变量的时候,用哪个变量完全是有指针类型指定的,这跟成员函数表现是不一样的。究其原因,父类的i和子类的i两个变量都在实例b中,而b的成员函数amethod()的地址是固定的只有一个,那就是Derived::amethod()。
0 0