写一个复合类,在相应位置写好注释。
class Point
{
public:
Point() { x =0; y = 0; }
Point(float x_centre, float y_centre)
{
x=x_centre;
y=y_centre;
}
void printPoint() const { cout << " x=" << x <<
" y=" << y << endl;}
// const成员函数:成员函数体内,不能修改这个类的成员变量的值
// printPoint里不可以修改x y 的值
private:
float x;
float y;
};
class Circle
// A Circle object is a radius and a centre
{
public:
Circle():point(){}; //default constructor
Circle(float x_centre,float y_centre,float r)
:point(x_centre,y_centre) { radius =r;}
//初始化列表,在Circle的构造函数里,
//调用了Point类的构造函数,并传递相应的参数,给Point的
//成员变量赋值。
//初始化列表的赋值先发生
void setCircle( float r, Point p ) //const
{
radius = r;
point = p; //圆心
}
void printCircle() const
//不能通过成员函数修改成员变量的值
//当你不需要在成员函数里修改成员变量的值的时候,建议加上const,可以增加程序的健壮性(鲁棒性)。
{
cout << "radius:"<<radius;
point.printPoint();
}
private:
float radius;
Point point;
};
void main()
{
Circle c;//定义一个对象,调用两个构造函数
//当创建复合类的对象时,不仅调用复合类本身的构造函数,
//还将调用复合类的类类型的成员变量的默认构造函数。
c.printCircle();
Point p(5,7);
p.printPoint();
c.setCircle( 10,p);
c.printCircle();
Circle c2(33.0,44.0,55.0);
c2.printCircle();
//关于const成员函数增加的代码
const Circle c3( 1, 2, 3 );
//const对象,只能调用const修饰的成员函数,const位于函数小括号
//后面。普通对象,可以调用const成员函数和非const成员函数。
c3.printCircle();
const Circle& c4 = c3;
//const对象,只能赋值给const类型的引用,而不能赋值给普通引用。
c4.printCircle();
//指向常量的指针,即指针指向对象的值不能修改,但可以指向别的对象。
const Circle* c5 = &c2;
c5->printCircle();
//常量指针,c6不能指向别的对象,但是可以修改指向对象的值。
Circle * const c6 = &c1;
Circle* const cp = &c2;//cp只能指向非cosnt对象。
cp->printCircle();
cp->setCircle( 10,p);
//Circle* const p = &c3; //不可以,原因这样有可能会变成可以更改的
const Circle* const pp = &c3;//定义成双cosnt就可以了。
//cp = &c3;
根据const的位置,区分到底哪个是常量——const后面紧跟着的那个就是常量。
}
在函数定义时,使用const的三种方式:
(1)函数返回值是const引用,即函数的返回值不能被修改。
const int& func(int); // a function that returnsa constant int reference
const int & a =func(5);//将返回值赋给另一个const引用才有意义。
(2)函数参数是const引用,函数体内不能修改参数的值。
int func(const int&); //a function that accepts a constant reference parameter
(3)const成员函数(只限于类的定义)
int func(int) const{}; // this must be a member function of a class,
//成员函数不能修改成员变量的值。
// the object *this is a constant object
//常量对象必须调用常量成员函数
For example:
const int& func( const int& ) const;
const int* func( const int* ) const;