// const和函数一起使用的情况
class Dog {
int age;
string name;
public:
Dog() { age = 3; name = "dummy"; } // 参数为const,不能被修改
void setAge(const int& a) { age = a; } // 实参是常量时,调用此函数
void setAge(int& a) { age = a; } // 实参不是常量时,调用此函数
void setAge(const int a) { age = a; } // 值传递使用const没有意义 // 返回值为const,不能被修改
const string& getName() {return name;}
const int getAge() //值传递const没有意义 // const成员函数,成员数据不能被修改
void printDogName() const { cout << name << "const" << endl; } // 对象是常量时,调用此函数
void printDogName() { cout << getName() << " non-const" << endl; } // 对象不是常量时,调用此函数
}; int main() { // 常量和非常量的转换
// const_static去除变量的const属性
const Dog d2(8);
d2.printDogName(); // const printDogName()
const_cast<Dog&>(d2).printDogName() // non-const printDogName() // 使用static_cast加上const属性
Dog d(9);
d.printDogName(); // invoke non-const printDogName()
static_cast<const Dog&>(d).printDogName(); // invoke const printDogName() }

C++进阶--const和函数(const and functions)的更多相关文章

  1. 12.C++-构造函数与析构函数调用顺序,const成员函数,const对象

    单个对象创建时,构造函数的调用顺序 1.首先判断该对象的类是否拥有父类,若有则先调用父类的构造函数 2.判断该对象的成员是否是其它类的成员,若是则调用成员变量的构造函数(调用顺序和声明顺序相同) 3. ...

  2. const 相关知识 const和指针、const和引用

    以前老是对const概念不清不楚,今天算是好好做个笔记总结一下.以下内容包括1)常量指针(指针本身是常量),2)指针常量(指针指向的是常量对象),3)常量引用,4)const成员函数. 常量指针,指针 ...

  3. const成员函数

    尽管函数名和参数列表都相同,void foo( ) const成员函数是可以与void foo( )并存的,可以形成重载! 我们假设调用语句为obj.foo(),如果obj为non-const对象,则 ...

  4. c++ const 成员函数

    第一个事实: 某类中可以这么声明定义两个函数,可以重载(overload) void pa(){ cout<<"a"<<endl; } void pa() ...

  5. const 放在函数后

    const 放在函数后表示这个函数是常成员函数, 常成员函数是不能改变成员变量值的函数.const 限定符,它把一个对象转换成一个常量.举例:为了使成员函数的意义更加清楚,我们可在不改变对象的成员函数 ...

  6. 对于这个函数const int func(const int& a) const声明中,三个const分别是什么意思?

    第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值 ...

  7. const 修饰函数

    At the very first ,I got a problem . Vector Vector::operator+(const Vector &v)const{ return Vect ...

  8. C++ const修饰函数、函数参数、函数返回值

    const修饰函数 在类中将成员函数修饰为const表明在该函数体内,不能修改对象的数据成员而且不能调用非const函数.为什么不能调用非const函数?因为非const函数可能修改数据成员,cons ...

  9. c++ 学习之const专题之const成员函数

    一些成员函数改变对象,一些成员函数不改变对象. 例如: int Point::GetY() { return yVal; } 这个函数被调用时,不改变Point对象,而下面的函数改变Point对象: ...

随机推荐

  1. json 与字符串相互转换,

    <!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...

  2. 15 int *ptr= (int *)(&a+1)跨了整个数组长度

    分析以下程序,输出结果 2,5 #include<stdio.h> int main() { ]={,,,,}; ); printf(),*(ptr-)); ; } 分析: a 代表的是i ...

  3. Android中aar和jar文件的认识

    在Android开发中,我们总是会引入其他第三方的库或者资源等,有时候是添加一个jar文件,有时候添加一个aar文件,那么这两种类型的文件有什么区别吗?详情请看下文. 一.描述. 1.   *.jar ...

  4. ssh的配置,ssh打开密钥登陆,关闭密码登陆。

    刚装玩fedora,那么我们就以fedora为例来说一下怎么配置: 1.先确认是否已安装ssh服务: [root@localhost ~]# rpm -qa | grep openssh-server ...

  5. struts2返回json字符串

    参考链接:http://www.cnblogs.com/starsli/p/4733669.html 1.通过使用struts2-json-plugin 插件来实现 2.通过收到使用json-lib提 ...

  6. vue+ajax+bootstrap+python实现增删改

    http://www.cnblogs.com/xwwin/p/5816527.html script src= " http://code.jquery.com/jquery.min.js ...

  7. 0107 for循环练习

    //画菱形 for(int hs = 1; hs < 11; hs++) { //画空格 for(int kg = 9; kg >= hs; kg--) { System.out.prin ...

  8. swig的语法和用法

    1.swig一般在js文件里引入方法: __inline(*.tpl),如下图所示 2.特殊用法 swig模板里套用swig模板,<link rel="import" hre ...

  9. 【opencv基础】cv::Point类型与行列的关系

    关系 row == height == Point.y col == width == Point.x Mat::at(Point(x, y)) == Mat::at(y,x) 参考 1.博客: 完

  10. vec2d

    namespace : cv::vec2d; void src2ipm(cv::Mat &srcimage, cv::Mat& uvgrid, cv::Mat& outimag ...