赋值是创建一个返回矩形区域的常量函数getArea()
。
double getArea() {
return width * height;
}
这是吗?
我在参数后面加上const吗?
我真的不明白我被问到了什么。
答案 0 :(得分:6)
在C ++中,当const关键字用于函数声明时,函数变为const。 const函数的想法是不允许它们修改它们被调用的对象。
def index
if
params[:category].blank?
@posts = Post.all.order("created_at DESC").paginate(page:params[:page], per_page: 1 )
else
@category_id = Category.all
@category_id = Category.find_by(name: params[:category]).id
@posts = Post.where(category_id: @category_id).order("created_at DESC").paginate(page:params[:page], per_page: 1 )
end
end
const在函数声明中的(空)参数列表之后。表示getArea()函数不修改对象的状态,即对象的数据成员。
请参阅此链接以获取更多说明:http://www.codeproject.com/Articles/389602/Constant-Member-Functions-Are-Not-Always-Constant
答案 1 :(得分:3)
double getArea() const
{
return width * height;
}
当用户不想修改或更改该变量或函数的值时,使用const关键字。
答案 2 :(得分:2)
就像内置数据类型(int
,double
,char
等...)一样,可以使用{{1}将类对象设为const
关键字。所有const
变量必须在创建时初始化。
一旦通过构造函数初始化了const
类对象,就不允许任何修改对象成员变量的尝试,因为它会违反对象的常量。这包括直接更改成员变量(如果它们是公共的),或者调用成员函数来设置成员变量的值。
const
类对象只能调用const
个成员函数。 const
成员函数是一个成员函数,它保证它不会更改任何类变量或调用任何非const成员函数。
消息来源: leancpp.com
答案 3 :(得分:2)
考虑:
class ClassType
{
int x;
public:
ClassType(int _x) : x(_x) {}
int GetX() { return x;}
};
const ClassType object(20);
object.GetX();
这将无法编译,因为object
是const(只读)。但GetX
未标记const
(只读)。 length()
,size()
,IsOpen()
是可以从只读对象调用的方法示例。因此,类应该为const对象提供这样的(const)函数。
您通常不会创建const对象,但您确实将它们传递给:
void foo(const ClassType& obj);
因此,GetX
函数应为:
int GetX() const { return x;}
const
作出承诺或合同此函数不会修改此对象。