常對象/常函數/常數據

#include "stdafx.h"
#include "iostream.h"

class circle
{
private:
  int x,y,r;
public:
  void print();
        void set() const;
  circle(int a,int b,int c);

};

void circle::print()
{
  cout<< "圓心:("<<x<< ","<<y<< ")"<<endl;
  cout<< "半徑:"<<r<<endl;
}
void circle:: set() const
{
     x=20;y=30;r=40;//錯,由於常函數裏面不能對數據成員作出修改
}
circle::circle(int a,int b,int c)
{
  x=a;
  y=b;
  r=c;
}


int main(int argc, char* argv[])
{
  circle p1(0,0,1);
  p1.print();
        
   const circle p2(0,0,2);
  p2.print();//常對象不能調用很是函數,即便這個函數並不對數據成員作出改變
  //記住,常對象只能調用常函數,可是很是對象是能夠調用常函數的

  return 0;
}
以上這個函數清楚地說明了以下事實
1》常對象只能調用常函數,常函數裏面不能對數據成員作出更改,不然編譯出錯
2》很是對象能夠調用常函數

但是,若是是常數據呢?
下面這個例子將給出很好的解釋
#include "stdafx.h"
#include "iostream.h"

class circle
{
private:
  int x,y,r;
   const int z;
public:
  void print();
  void circle::print() const;
  circle(int a,int b,int c);
  circle(int a,int b,int c,int d);//函數聲明中初始化列表不用帶
};

void circle::print()
{
  cout<< "圓心:("<<x<< ","<<y<< ")"<<endl;
  cout<< "半徑:"<<r<<endl;
}
void circle::print() const//重載了一個常量print函數
{
  cout<< "圓心:("<<x<< ","<<y<< ")"<<endl;
  cout<< "半徑:"<<r<<endl;
  cout<< "常量數據成員爲:"<<z<<endl;
}
// circle::circle(int a,int b,int c)//錯,會提示常量成員z沒有初始化
// {
//    x=a;
//    y=b;
//    r=c;
// }
circle::circle(int a,int b,int c,int d):z(d)
{
  x=a;
  y=b;
  r=c;
}

int main(int argc, char* argv[])
{
  circle p1(0,0,1,3);
  p1.print();
        
   const circle p2(0,0,2,3);   p2.print();//由於這裏重載了一個常函數print      return 0; }
相關文章
相關標籤/搜索