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++编写