C++ :: 的用法小结

:: 的用法小结:

用于将类内声明的静态数据成员在类外初始化;
用于将类内声明的函数成员在类外实现;
用于捞出继承时访问权限被改变的成员,使之还原为原来的权限;
继承时派生类新增了与基类同名的成员,由于同名屏蔽,从而使基类的成员被遮蔽,可用: :将被遮蔽的基类成员重见天日;
用于在类外或子类中访问不继承的静态成员;
用于区分不同名空间的标识符。


:: 的作用之一:恢复访问权

[cpp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3. class A  
  4. {   
  5. public:   
  6.     A(int xx = 1,int yy = 2){X=xx;Y=yy;}  
  7.     int get_XY(){return X*Y;}  
  8.     void put_XY(){cout << X << "*" << Y <<"="<< X*Y <<endl;}  
  9. protected:   
  10.     int X,Y;  
  11. };  
  12. class B:private A  
  13. {   
  14. public:   
  15.     B(int s,int xx,int yy):A(xx,yy),S(s){}  
  16.     //A::put_XY;  
  17.     A:: get_XY;  
  18.     void make_S(){put_XY();cout<<S<<endl;}  
  19. private:   
  20.     int S;  
  21. };  
  22.   
  23.   
  24. void main()  
  25. {  
  26.     B b(3,5,6);  
  27.     b.get_XY();  
  28.     //b.put_XY(); 还是private权限,不可以在类外被访问。  
  29.     b.make_S();  
  30. }  

注意:

恢复时不可带类型名;( int A::get_XY(); 错)

只能恢复不可提升或降低访问权限;

当父类被恢复的函数重载时,将全都恢复;

父类中不同访问域的重载函数不能恢复;

若子类新增了与父类同名的成员,则父类同名的成员不可恢复。


:: 的作用之二:隐藏再现

[cpp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3. class A  
  4. {   
  5. public:   
  6.     int X,Y;   
  7. };  
  8. class B:public A  
  9. {   
  10. public:   
  11.     int Y,Z;   
  12. };  
  13. void main()  
  14. {   
  15.     B b;  
  16.     b.X= 1;  
  17.     b.Y= 2;  
  18.     b.A::Y= 3;  
  19.     b.Z= 4;  
  20. }  

:: 的作用之三:隐藏再现

[cpp]  view plain  copy
  1. #include <iostream>  
  2. using namespace std;  
  3. class A  
  4. {   
  5.     public:  
  6.     static int i;  
  7.     static void Add() { i++; }  
  8.     void out() { cout<<"static i = "<<i<<endl; }  
  9. };  
  10. int A::i= 10;  
  11. class B:private A   
  12. {  
  13. public:   
  14.     A::out;   
  15. };  
  16. class C:public B  
  17. {   
  18. public:  
  19.     void f();  
  20. };  
  21. void C::f()  
  22. {   
  23.     //私有继承,化公为私  
  24.     //i = 50; // 错  
  25.     //Add() ; // 错  
  26.     A:: i = 50;  
  27.     A:: Add();  
  28. }  
  29. void main()  
  30. {   
  31.     A x;  
  32.     C y;  
  33.     x.Add();  
  34.     x.out();  
  35.     y.f();  
  36.     y.out();  
  37.     cout<< "static i = "<<A::i<<endl;  
  38. };  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值