当前位置:编程学习 > C/C++ >>

C/C++ 关键字const的定义?

(4)对于类的成员函数,若指定其为const 类型,则表明其是一个常函数,不能修改类的成员变量;
(5)对于类的成员函数,有时候必须指定其返回值为const 类型,以使得其返回值不为“左值”

这两句话什么意思。
答案:举一个例子,可能你会跟明白些。
No.(4)
class A
{
public:

A(int n=0):data(n){}

void SetData( int n )

{

data = n;

}

int GetData() const // const成员函数

{

// 在const成员函数里面【只能取用】成员变量,而【不能修改】该类里面任何的成员变量

// 比如,如下代码会编译出错,

//data = 1; // error C2166: l-value specifies const object

cout << data; // 取用是没有问题的。

return data;

}
private:

int data;
};
所以,对于一个成员函数,其函数体内的代码如果只是成员变量,而不会修改任何成员变量,就应该给这个函数加上const,来表达你的这个意图。防止以后维护人员不小心在这个函数里修改了变量,编译的时候马上就会知道了。
通常gettor函数就应该设置成const成员函数。如上的代码所示。

还有,附加说明一下:通过一个const对象(object)调用其成员函数,那只能调

用const成员函数。如果声明了一个上面那个类A的const对象,如下:

const A aObj(10); // aObj是一个常量对象

cout << aObj.GetData(); // ok

//aObj.SetData( 11 ); // error,因为SetData不是const成员函数
然而,对于非const对象,却没有这个限制。非const对象依然可以调用const成员函数的。

NO.(5)
struct MyData
{

int a;

int b;

int c;

// ...
};

class MyClass
{
public:

void SetInitData()

{

m_Data.a = 1;

m_Data.b = 1;

m_Data.c = 1;

}

const MyData& GeteMyData() const // 这里面有2个const:)。后面的那个







// const的意思,上面说的那个。

{

return m_Data;

}
private:

MyData m_Data;
};

如下使用:

MyClass myObj;

myObj.SetInitData();

//MyData& myData = myObj.GeteMyData(); 这行代码会编译不通过的哟

// 给返回类型的数据加上const的引用的意思是,只给你拿去read,但是不允

许你write。

const MyData& myData = myObj.GeteMyData();

//myData.a = 2; // error.尝试修改,会编译不通过。
所以第五点的核心意思就是返回一个常量引用,作为只读数据使用。
注:一般情况下,对于这一条,都会指定const T&(注:引用)。

欢迎使用“hi 在线交谈”交流

(4)

class c

{

int a;

int fun() const

{

a=1;//编译错误,不能修改类的成员变量

return a;//正确,可以读取类的成员变量

}

 

(5)

class c

{

int a;

const int fun()

{

return a;

}

}

调用时int x=c.fun()正确,c.fun()=x错误,c.fun()是常数,不能为左值(即等号左边)

上一个:dev c++的基本语法是什么?
下一个:银行排队问题!用C++编写

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,