C++学习大纲:常成员函数


C++学习大纲:常成员函数

C++ 常成员函数

常常把对象的成员函数分为两类:修改对象状态的成员函数、获取对象状态的成员函数。

常成员函数就是一种获取对象状态的成员函数,并且不能改变对象的状态(也就是不能修改对象的成员的值)。

形式:

class A

{ ...

void f() const {...}

}

class A

{...

void f() const;//声明

}

void A::f() const //定义

{

...

}

当时要注意下面两个例子:

class A

{

int x;

char *p;

public:

...

void f() const

{

x=10; //Error

p = new char[20]; //Error

}

}

class A

{

int x;

char *p;

public:

...

void f() const

{

strcpy(p,"abc");//没有改变p的值,因此编译程序认为OK

*p = 'A';//同上

}

}

————————————————


C++学习大纲:常成员函数

【C++】 常对象、常数据成员、常成员函数总结

常数据成员

 ◆ 常数据成员必须进行初始化,并且不能被更新。

 ◆ 常数据成员不能在声明时赋初始值(普通数据成员也是),常数据成员必须在构造函数初始化列表进行初始化;普通数据成员在初始化列表和函数体中初始化均可。

 ◆ PS:类的成员对象若要传入参数初始化,则必须在构造函数初始化列表进行;(成员对象:当一个类的成员是另一个类的对象时,这个对象就叫成员对象。)

常对象

 ◆ ⭐常对象可以调用常成员函数,不能调用非const成员函数;非const对象,可以调用普通成员函数和常成员函数。

 ◆ 常对象的成员函数不一定都是常成员函数;同样的常对象的数据成员不一定都是常数据成员。

 ◆ 常对象一旦初始化,常对象的数据成员便不允许修改,而不是说常对象的数据成员都是常数据成员。

 ◆ PS:定义常对象有两种方法,1. Point const a; 2. const Point a;(同样的,定义变量或指针时,const放前放后意义一样,如:1. const double a; double const a; 2. const int *p; int const *p; 但是定义指针常量时,只能用 int * const p;)

常成员函数

 ◆ 常成员函数不更新对象的数据成员。

 ◆ 常成员函数的const关键字可以被用于参与对重载函数的区分。

 ◆ ⭐通常非const成员函数需要定义一个const版本的重载函数,以方便定义常对象后调用常成员函数。

  ◈ 如果常对象调用的常成员函数返回的是指向当前对象的指针(或返回的是当前对象),那么此常成员函数的声明的返回类型要加const,例如:

    ◊ 成员函数返回指向当前对象的指针

      const *Point fun1();    //非const成员函数的类内声明;

      const *Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;

    ◊ 成员函数返回指向当前对象

      const Point fun1();    //非const成员函数的类内声明;

      const Point fun1() const; //习惯上要再声明一个常成员函数作重载函数,注意到此函数声明有两个const;

    ◊ ⭐注意,如果一个类中声明以下4个重载函数:

      ① Point fun1();

      ② const Point fun1();

      ③ Point fun1() const;

      ④ const Point fun1() const;

     【解析】①和②是冲突的,因为无法区分仅按返回类型区分的重载函数;③和④是冲突的,也是因为无法区分仅按返回类型区分的重载函数。

     所以正确的重载函数搭配有3种:

      ◊ ①和③搭配:

        Point fun1();             //函数返回非const对象

        Point fun1() const;          //函数返回非const对象

       [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是非const的Point类对象。

      ◊ ①和④搭配(这里把返回类型改为指针,因为常用):

        Point *fun1() {return this; };      //函数返回指向本对象的指针

        const Point *fun1() const { return this; };//函数返回指向本常对象的指针,第一个const说明返回的是指向常对象的指针,第二个const说明此函数是常函数

       [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象(如return *this;)。

      ◊ ②和④搭配:

        const Point fun1();          //函数返回常对象

        const Point fun1() const;       //函数返回常对象

       [解析]适用于定义常对象后调用常成员函数,常成员函数返回类型是常Point类对象。

      ◊ ②和③搭配:

        const Point fun1();

        Point fun1() const;

       [解析]虽然搭配合法,但是似乎不存在这种搭配。

————————————————

C++学习大纲:常成员函数

通过分享实用的计算机编程语言干货,推动中国编程到2025年基本实现普及化,使编程变得全民皆知,最终实现中国编程之崛起,这里是中国编程2025,感谢大家的支持。

原文链接:https://blog.csdn.net/haitaolang/article/details/70162903


分享到:


相關文章: