C++类编程(一)const的使用

时间:2023-11-17 13:33:20

设计类时,考虑以下五点

1、构造函数初始化列表

2、函数该不该加const

3、参数传递尽量考虑用引用传递,考虑加不加const

4、返回用不用引用

5、数据尽量放在private,函数尽量放在public

一、构造函数

①构造函数参数名不能与类成员名相同

②只有当没有定义能和构造函数时,编译器才提供默认构造函数

③两种定义默认构造函数的形式

1、给已有构造函数的所有参数提供默认值.Stock(const string & co="Error",int n=0,double d=0.0);

2、通过函数重载,定义一个没有参数的构造函数。Stock();

④成员初始化参数列表。

Classy::Classy(int n,int m) : mem1(n),men2(0),men3(n*m+2)

{

//........

}

1、其只能用于构造函数

2、对非静态const数据成员,必须用器来初始化

3、对引用数据成员,必须用器来初始化

4、成员初始化的顺序与其在类声明中出现的顺序相同,与初始化器中的排列顺序无关

⑤析构函数

程序必须有一个析构函数,如果没有,编译器将默认的生成一个析构函数。当在构造函数中使用了new来分配内存时,必须使用delete来释放内存。

二、参数引用

引用变量的主要用途是将引用变量用作形参,使函数可以使用原始数据。引用是已定义变量的别名,与变量指向相同的值和内存单元。单独使用引用变量,在声明引用时必须将其初始化,而不是像指针那样,先声明后赋值。下面程序将看到传递引用时,函数将使用原始数据,改变引用将改变原始数据,与已往的按值传递不同。

#include<iostream>

void swapr(int & a,int & b);

int main()
{
using namespace std;
int m=,n=; swapr(m,n);
cout << "m " << m << " n " << n << endl; return ;
} void swapr(int & a,int & b)
{
using namespace std;
int temp;
temp=a;
a=b;
b=temp;
cout << "a " << a << " b " << b << endl;
}

结果如下

C++类编程(一)const的使用

原始数据和形参的值都发生了交换。

由于改变引用的值,会同时修改原始变量,为了然函数使用传递的信息,而不对这些信息进行修改,同事用像使用引用,则可以使用常量引用,相比于普通变量,const变量属于不可修改的左值。

将引用参数声明为const引用有三个好处:

①使用const引用可以避免无意中修改数据的编程错误;

②使用const引用是函数能够处理const和非const实参,否则只能接受非const实参;

③使用const引用可以使函数能够正确的生成并使用临时变量。

函数参数使用引用、指针和按值传递的选择

对于使用传递的值而不作修改的函数

1、如果数据对象很小,如内置的数据类型或小型结构,则按值传递
2、如果数据对象是数组,则使用指针(唯一选择),并将指针声明为指向const的指针
3、如果数据对象是较大的结构,则使用const指针或const引用,提高效率
4、如果数据对象是类对象,则使用const引用

对于修改函数中数据的函数

1、如果数据对象很小,如内置的数据类型或小型结构,则使用指针
2、如果数据对象是数组,则使用指针(唯一选择)
3、如果数据对象是较大的结构,则使用指针或引用
4、如果数据对象是类对象,则使用引用

三、返回引用

返回引用可以提高效率。返回引用要注意的问题:避免返回函数终止时不存在的内存单元的引用(如在函数中生命的临时变量)。可以返回作为参数传递给函数的引用,也可以使用new分配新的存储空间,但要使用delete删除存储空间。

一般如果函数要返回局部对象的话,应该返回对象,而不是引用,如果函数返回一个没用公有复制构造函数的类的对象,这必须返回对象的引用。如果返回的对象需要修改,则返回非const引用,如果不修改,则返回const引用。

四、函数加const

只要类方法不修改调用对象,就应该将其声明为const。