C++ 关于类的那些基础事
上一篇 / 下一篇 2012-03-28 09:31:53 / 个人分类:C++
1、看看下面的代码,定义了一个dispaly()和重载了一个display();我们现在聊聊const函数成员和,const重载。我们知道将函数成员的后面加上const是定义一个const函数成员。那么const函数成员有什么特性呢?
7T/i1Z#n#_Z,@8p-e~09vPvGT3|0 很简单就是不能改变其所操作的数据成员。其实还有一个作用哦,就是实现重载函数。需要注意的是在display()重载成员函数并不是前面的cosnt在起着作用哦,因为我们是不能依靠返回值的类型不同来实现函数的重载的。这条想必大家都是知道的。
q ?p$pb,t,n^*y0 51Testing软件测试网b-U*Wr sm3U8m} FfOicL%\f0#include<iostream> 5fyVB*I!Clx&nd0using namespace std;51Testing软件测试网vH6F)sM~-hXA class Screen{51Testing软件测试网g L*W9Z.O9Q-XuAt private: D:ARD ku0 void do_display() const ,@z(CT _#b0tg7Cv0 {51Testing软件测试网']&ICs/x-w,b(I P/C a cout<<"OK!!!"<<endl; C$e'J(LrE&b,V0r"dI0 }51Testing软件测试网h0OH"bp5S2q-K'K public:51Testing软件测试网,e`Y#m&x+rx$U c Screen &display()51Testing软件测试网-BH vN`yk { hY#@(j$P F`;e%@0 cout<<"Not const."<<endl;51Testing软件测试网@b}1K/bA#[$~-I p5Rr do_display(); .Z6`3fCe"UUn0 return *this;51Testing软件测试网&xs0p4\-cD/R }51Testing软件测试网;} }8ko&S/ioO_ const Screen &display()const 'i'R+_"G8nLm l0 {51Testing软件测试网/C[m~\)] cout<<"Const."<<endl; U c$p)U6`+N/G5s L0 do_display(); vce&W#j9T0 return *this; *e:r,K:`5p$p&|w f%T9E?r\0 }51Testing软件测试网-Uzh6pg3} }; ?N5n9D NI0int main()51Testing软件测试网 g.HX S0mY {51Testing软件测试网*UD oE4P_Q5j+P%a0iZ Screen screen; vwFVt*\,U^.E'u0 screen.display();51Testing软件测试网;S,D4A |ia\ O const Screen screen1; N+B"y i7n0 screen1.display(); do"cj3up M0 return 0; T(IXTpM5q W#]|0} |
51Testing软件测试网G^t5b*jP2{J
DtQ H5K4\VXh_0 不信你可以试试,将后面的const去掉改成下面这样:
,~(VA|I/`Ct8I0 51Testing软件测试网j-gD R~j.l0Ad51Testing软件测试网/? H!E.[5y1Z*nw9z
const Screen &display()51Testing软件测试网8ky@_9Z {51Testing软件测试网'm%{6R:b-A(c0] cout<<"Const."<<endl;51Testing软件测试网yR?#i3jp:~ do_display(); $Ch |C;D4zX0 return *this;51Testing软件测试网l3Td*JFzL%X'z/U } |
51Testing软件测试网3c,\P uc5v
51Testing软件测试网L7\c^q&C编译器将会报错告诉你无法重载仅按返回值类型重载的函数。还有一点需要注意的就是const成员必须在定义和声明中都出现哦。
ZR!yn Y'R0 51Testing软件测试网 Q!U9wt Zt zOj2、注意区分返回*this中的this是一个指向类类型的const指针和指向const类类型的const的指针
Jx v:h[Q0 51Testing软件测试网6n-j,OR1e)f5yc.OU#QN指向类类型的const指针是指可以改变this所指向的值,但是不能改变this所保存的地址。而指向const类类型的const的指针,既不能改变this所指向的地址,也不能改变所指向的对象。或许你还是不明白吧。其实this可定是指向一个地址,这是没有什么质疑的吧。const指针也就是说这个地址是const的,所以this所指向的地址是不可变。也就是说,无论你现在所向的对象是谁?但是总是存放在这块内存中。而const类类型的对象,显然就是说对象是const的,对象的是不能改变的,自然对象里面的值也是不能改变的。那么指向const类类型的const指针就是指向某一固定的内存的某一固定的对象,地址和对象都不能改变。
:~1U&^5m&B q0 51Testing软件测试网3`i7K){x上面的例子中开始的函数返回的是指向类类型的const指针,重载的函数display()则返回的是指向const类类型的const的指针。后者是不能在改变所指向的对象的。
7RV"{m4d^0 51Testing软件测试网 y)^]H"L{+N(二)返回值类型不一定在类的作用域中
%V:[6h4qf0 51Testing软件测试网7O+H:p3?$Zeg;[f#a观察线面代码:
Z(L,`-w-^0 51Testing软件测试网OI5o,OHD1yO1l9MeWF?y-]W0/\I~y;A8k$C&Nd0
51Testing软件测试网{] i
I.OKm'| class A{51Testing软件测试网#DSC.Sm4U
|
6gaF|2N4Pk\}2g0 我们知道typedef的几个基本用处:51Testing软件测试网(C |*g%N1I