C++面向对象(2)

来源:互联网 发布:武术 知乎 编辑:程序博客网 时间:2024/04/27 14:14

一、看代码写结果——c++类成员的访问

[cpp] view plain copy
  1. <span style="font-size:18px;">#include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. #define public private<span style="white-space:pre">        </span>(1)  
  6.   
  7. class Animal  
  8. {  
  9. public:<span style="white-space:pre">               </span>(2)  
  10.     void MakeNoise();  
  11. };  
  12.   
  13. int main()  
  14. {  
  15.     Animal animal;  
  16.     animal.MakeNoise();<span style="white-space:pre">   </span>(3)  
  17.   
  18.     return 0;  
  19. }</span>  

(1)正确。把public宏定义为private。
(2)正确。定义public成员。注意:由于public已经被定义为private,因此这里的MakeNoise()成员函数实际上是private的。
(3)错误。对象不能访问类的私有成员函数


二、类成员的初始化

找错
[cpp] view plain copy
  1. <span style="font-size:18px;">#include <iostream>  
  2.   
  3. using namespcae std;  
  4.   
  5. class Obj{  
  6.     int i, j;  
  7. public:  
  8.     Obj(int k) : j(k), i(j)  
  9.     {  
  10.     }  
  11.     void print()  
  12.     {  
  13.         cout<<i<<endl<<j<<endl;  
  14.     }  
  15. };  
  16.   
  17. int main()  
  18. {  
  19.     Obj obj(2);  
  20.     obj.print();  
  21. }</span>  
这里初始化顺序与变量声明顺序一致,而不是按照出现在初始化列表中的顺序。这里i在j之前声明,所以构造时i也是在j之前被初始化,所以第8行先执行i(j),这时j的值为随机值,故i的值也是随机值,然后执行j(k),所以j为2.


三、看代码写结果——静态成员变量的使用

[cpp] view plain copy
  1. <span style="font-size:18px;">#include <iostream>  
  2.   
  3. using namespace std;  
  4.   
  5. class Myclass  
  6. {  
  7. public:  
  8.     Myclass(int a, int b, int c);  
  9.     void GetNumber();  
  10.     void GetSum();  
  11. private:  
  12.     int A;  
  13.     int B;  
  14.     int C;  
  15.     int Num;  
  16.     static int Sum;  
  17. };  
  18.   
  19. int Myclass::Sum = 0;  
  20.   
  21. Myclass::Myclass(int a, int b, int c)  
  22. {  
  23.     A = a;  
  24.     B = b;  
  25.     C = c;  
  26.     Num = A+B+C;  
  27.     Sum = A+B+C;  
  28. }  
  29.   
  30. void Myclass::GetNumber()  
  31. {  
  32.     cout<< "Number = " << Num << endl;  
  33. }  
  34.   
  35. void Myclass::GetSum()  
  36. {  
  37.     cout<< "Sum = " << Sum << endl;  
  38. }  
  39.   
  40. int main()  
  41. {  
  42.     Myclass M(3, 7, 10), N(14, 9, 11);  
  43.     M.GetNumber();  
  44.     N.GetNumber();  
  45.     M.GetSum();  
  46.     N.GetSum();  
  47.   
  48.     return 0;  
  49. }</span>  
静态成员被当做该类型的全局变量。对于非静态变量,每个类对象都有自己的复制品,而静态成员对每个类的类型只有一个复制品。静态成员只有一份,由该类类型共享。

原创粉丝点击