C++ //继承中的对象模型 //利用开发人员命令提示工具查看对象模型 //父类中所有非静态成员属性都会被 子类继承下去 //父类中私有成员属性 是被编译器给隐藏了 因此是访问不到 但是确实被继承

2021/8/8 11:06:33

本文主要是介绍C++ //继承中的对象模型 //利用开发人员命令提示工具查看对象模型 //父类中所有非静态成员属性都会被 子类继承下去 //父类中私有成员属性 是被编译器给隐藏了 因此是访问不到 但是确实被继承,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

  1 //继承方式
  2 //语法:class 子类 :继承方式  父类
  3 //继承方式 三种:
  4 //1.公共继承
  5 //2.保护继承
  6 //3.私有继承
  7 
  8 /*
  9 #include <iostream>
 10 #include <string>
 11 using namespace std;
 12 
 13 //继承方式
 14 //1.公共继承
 15 class Base1
 16 {
 17 public:
 18     int m_A;
 19 protected:
 20     int m_B;
 21 private:
 22     int m_C;
 23 
 24 };
 25 //1.公共继承
 26 class Son1 :public Base1
 27 {
 28 public:
 29     void func()
 30     {
 31         m_A = 10;   //父类中的公共权限成员 到子类中依然是 公共权限
 32 
 33         m_B = 20;  //父类中的公共权限成员,到子类依然是   保护权限
 34                    //类内可以访问   类外不可以访问
 35 
 36         //m_C = 30;  //父类中的私有全程成员,到子类中 访问不到    
 37     }
 38 };
 39 
 40 void test01()
 41 {
 42     Son1 s1;
 43     s1.m_A = 100;
 44     //s1.m_B = 100;  //类内可以访问   类外不可以访问
 45     
 46 
 47 }
 48 //保护继承
 49 class Base2
 50 {
 51     public:
 52         int m_A;
 53     protected:
 54         int m_B;
 55     private:
 56         int m_C;
 57 
 58 
 59 };
 60 
 61 class Son2 : protected Base2
 62 {
 63 public:
 64     void func2()
 65     {
 66         m_A = 100;  //父类中公共成员到 子类中变为保护权限
 67         m_B = 100;  //没有发生变化  还是私有成员
 68 
 69         //m_C = 100; //父类中私有成员 子类访问不到
 70     }
 71 };
 72 
 73 void test02()
 74 {
 75     Son2 s2;
 76     //s2.m_A = 1000;  //在Son2中已经变为了 保护权限  所以类外 访问不到
 77     //s2.m_B = 200;    //在Son2中已经变为了 保护权限  所以类外 访问不到
 78     //s2.m_C = 551;    //私有成员不可以访问
 79 
 80 
 81 }
 82 //私有继承
 83 class Base3
 84 {
 85     public:
 86         int m_A;
 87     protected:
 88         int m_B;
 89     private:
 90         int m_C;
 91 
 92 };
 93 class Son3 :private Base3
 94 {
 95 public:
 96     void func3()
 97     {
 98         m_A = 100;      //父类中公共成员到子类中变为 私有成员
 99 
100         m_B = 200;     //父类中保护成员到子类中变为  私有成员
101 
102         //m_C = 120;      //父类中的私有成员  子类不可以访问
103     }
104 
105 };
106 class GrandSon4 : public Son3
107 {
108 public:
109     void func4()
110     {
111         //m_A = 1000;  //到了 Son3中 m_A 变为私有,即使是 儿子也访问不到 
112         //m_B = 2000;  //到了 Son3中 m_A 变为私有,即使是 儿子也访问不到 
113     }
114 
115 };
116 void test03()
117 {
118     Son3 s3;
119 
120     //s3.m_A = 200;    //到Son3中 变为私有成员 访问不到
121     //s3.m_B = 100;    //到Son3中 变为私有成员 访问不到
122     //s3.m_C = 300;    //父类中的私有成员  子类不可以访问
123 
124 }
125 
126 int main()
127 {
128 
129 
130     system("pause");
131 
132     return 0;
133 
134 }
135 
136 */
137 
138 
139 
140 //继承中的对象模型
141 
142 
143 #include <iostream>
144 #include <string>
145 using namespace std;
146 
147 class Base
148 {
149 public:
150     int m_A;
151 protected:
152     int m_B;
153 private:
154     int m_C;
155 };
156 class Son :public Base
157 {
158 public:
159     int m_D;
160 };   
161 //利用开发人员命令提示工具查看对象模型
162 //跳转盘符 
163 //跳转文件路径 cd + 具体路径
164 //查看命名
165 //cl /d1 reportSingleClassLayout类名 文件名
166 void test01()
167 {
168     //16
169     //父类中所有非静态成员属性都会被 子类继承下去
170     //父类中私有成员属性 是被编译器给隐藏了 因此是访问不到 但是确实被继承下去了
171 
172     cout << "sizeof son = " << sizeof(Son) << endl;
173 }
174 
175 int main()
176 {
177 
178     test01();
179 
180 
181     system("pause");
182 
183     return 0;
184 
185 }

 

 

 



这篇关于C++ //继承中的对象模型 //利用开发人员命令提示工具查看对象模型 //父类中所有非静态成员属性都会被 子类继承下去 //父类中私有成员属性 是被编译器给隐藏了 因此是访问不到 但是确实被继承的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程