常对象/常函数/常数据

#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; }
相关文章
相关标签/搜索