在用C++进行面向对象编程的时候,有时需要在一个类里包含两个代码相似的函数,而它们之间的唯一区别是,一个为const类型,一个是non-const类型. 此时如果将相同的代码写在两个函数中,则严重违反了DRT(Don't repeat yourself)原则.正确的做法是:让non-const函数引用const函数,如下所示: class Sample { public: const char& doSomething()const { //there is some code to do }…
一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: void Point:: SetPt (int x, int y) { xVal=x; yVal=y; } 为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数的函数原型中加上const说明: class Point { public: int GetX() const; int GetY()…
成员函数后面加const,表示在该函数中不能对类的数据成员进行改变,比如下面的代码: #include <stdio.h> class A { private: mutable int aa; public: A(){} int x() { printf("no const\n"); return aa++; } int x() const { printf("const\n"); return aa++; } }; int main() { A a1;…
(1)我们知道函数的重载时根据函数的参数类型以及函数参数个数来重载的,不能用函数返回值来重载函数.但是有时候函数参数个数和函数参数类型重载函数会和默认参数发生冲突: int fun(int i,char c='a'){ } int fun(int i){ } int main(){ int i fun(i);//此时函数重载和函数默认参数就会出现问题,此时不知道具体调用的是哪一个函数 fun(i,'b');//这样调用就不会出现错误,此时明确知道调用的是哪一个函数 //出现上述重载函数时,int…
昨天,看了一点<c++ primer>和<程序员的自我修养>,想起了自己以前的两个知识点,这里回顾,并且总结一下. 1. const指针的参数 看primer的时候,看到几个概念,虽然都大概知道,但是还是有点模糊的,今天权且记在这里. (1)const形参 const形参,从const的意思来看,就是形参是const的,不能够改变.但是函数在传值的时候都是传的副本,所以不管形参是不是const,都可以使用const或者非const的实参传递.[注:这里指的是普通的形参] (2)co…
本文转自http://blog.csdn.net/whyglinux/article/details/602329 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const.所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数…
在C++程序中,经常用const 来限制对一个对象的操作,例如,将一个变量定义为const 的: const  int  n=3; 则这个变量的值不能被修改,即不能对变量赋值. const 这个关键字经常出现在函数的定义中,而且会出现在不同的位置,比如: int  strcmp (const   char  *str1,const    char  *str2); const    int  & min (int  &, int  &); void  printMessage (c…
const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地…
范例: class matrix { public: matrix(){}; const double getvalue(const unsigned row, const unsigned column) const; private: balabalabala; } 上述范例声明了一个martrix类,该类包含一个getvalue接口,内含3个const标识符,这也是const在C++函数中最常出现的三个位置. 我们可以通过 matrix a; double b=a.getvalue(x,y…
一.用const修饰函数的参数 函数参数类型前加const指明该参数为常量,在函数内部不可改变. void func(const int x) { //x不可以在内部进行赋值等操作. } 注:当参数为引用传递或者指针传递作为输出时,都不能加const 二.用const修饰函数的返回值 函数返回时,会把返回值复制到外部临时的存储单元中,存储类型由函数的返回类型来确定. "值传递"加const修饰没有任何价值. "址传递"加const修饰,函数返回值只能被赋给加cons…