⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 17-11.txt

📁 《C/C++完美演绎》源代码
💻 TXT
字号:
/* 范例:17-11 */
#include <iostream.h>
class A
{
  public:
    A(){cout << "Cons_A\t";}
    ~A(){cout << "Des_A\t";}
    int a;
    void pp(){cout << "pp() :class A\n";}
    void show_addr(){cout << "A:: &a=" << &a << "\n";}
};
class B:public A
{
  public:
    B(){cout << "Cons_B\t";}
    ~B(){cout << "Des_B\t";}
    int a;
    int pp;
    void show_addr();
};
void B::show_addr()
{
  A::show_addr();
  cout << "B:: &a=" << &a << " &pp=" << &pp << "\n";
}
class C:public A
{
  public:
C(){cout << 
"Cons_C\t";}
    ~C(){cout << "Des_C\t";}
    int a;
    void pp(char a){cout << a << " :class C\n";}
    void show_addr();
};
void C::show_addr()
{
  A::show_addr();
  cout << "C:: &a=" << &a << "\n";
}
class D:public B,public C
{
  public:
    D(){cout << "Cons_D\t";}
    ~D(){cout << "Des_D\t";}
    int a;
    int d;
    void show_addr();
};
void D::show_addr()
{
  B::show_addr();
  C::show_addr();
  cout << "D:: &a=" << &a << " &d=" << &d << "\n";
}
void test()
{
  D obj;
  cout << "\nsizeof(D)=" << sizeof(obj) << "\n";
  obj.show_addr();
  // class D内继承自B的成员副本a
  cout << &obj.B::a << "\n";
  // class D内继承自C的成员副本a
  cout << &obj.C::a << "\n";
}
void main()
{
  test();
  getchar();
}

程序执行结果:
Cons_A  Cons_B  Cons_A  Cons_C  Cons_D
sizeof(D)=28
A:: &a=0065FDE0
B:: &a=0065FDE4 &pp=0065FDE8
A:: &a=0065FDEC
C:: &a=0065FDF0
D:: &a=0065FDF4 &d=0065FDF8
0065FDE4
0065FDF0
Des_D   Des_C   Des_A   Des_B   Des_A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -