C++中const对象和const成员函数

1?  成员函数可以声明成const函数(声明后加const)

2?  对于const对象,只能调用const成员函数

3?  Const函数和非const函数可以形成重载

4?  对于非const对象的函数调用优先选择非const成员函数

5?  对于类中的mutable数据成员,可以被const成员函数修改

//
//  main.cpp
//  Const
//
//  Created by 06 on 15/1/24.
//  Copyright (c) 2015年 黄永锐. All rights reserved.
//

#include <iostream>
using namespace std;

//员工类
class Employee{
    string name;
    int age;
    mutable int x;//注意这个关键字的作用哦

public:
    Employee(string name,int age):name(name),age(age){
       // name = name;//这样区分不开
    }

    //
    void setName(string name){
        this->name = name;
    }

    string getName() const{
        return name;
    }

    void show(){
        cout << name << "今年" << age << "岁了" << endl;
      //  name = "2345";
    }

#pragma 注意  const加在前面,修饰的是返回值
    const void show1(){
        cout << name << "今年" << age << "岁了" << endl;
        //  name = "2345";
    }

#pragma 我们想修饰一个函数让它具有常量性  应该把const加在参数后面
    void show2() const{
        cout << name << "今年" << age << "岁了" << endl;
       // this->name = "1234567";//const函数中不能修改普通成员变量
        x = 100;//被mutable修饰的变量可以在const函数中修改
    }

#pragma 函数重载:  const函数 与 非 const函数可以形成函数重载的关系

};

//主函数
int main(int argc, const char * argv[])
{

    //创建对象
    Employee em("张三",18);
    em.show();
    em.setName("王五"); //这里是修改了成员变量
    em.show();
    em.setName("dfghj");
    em.getName();

#pragma 如果我这个对象是一个const类型的对象  会如何?em2能够调用show方法吗?
    const Employee em2("李斯",21);
   // em2.show(); //不能调用。 为什么?  因为

    /*
     const类型的对象,说明这个对象里面的所有成员变量都不允许修改
     但是在调用show方法的时候,show方法里面现在的确是没有修改,但是可以修改。那么我就不放心了,你说你不修改,可是你可以修改
     在em2调用show方法的时候,把em2隐式传进去,然后再show方法里面就可以通过this->拿到对象获取变量
     */

#pragma 怎样才可以让它去调用?  只要保证在这个函数里真的不去修改任何变量
    //怎么去保证?  我把这个函数修饰成const

    em2.show2();//const对象只能调用const类型的成员函数
    em.show2();//普通的对象也能调用

#pragma 所以说在一些函数里面没有修改成员变量的函数  还是加上const好. getter方法可以加,setter方法不能加
    em2.getName();
    //em2.setName("dfghj");//不能调用
    return 0;
}
时间: 2024-08-03 09:55:00

C++中const对象和const成员函数的相关文章

const修饰类的成员函数

<Effective C++>里面说,尽量使用const,const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,这里不再赘述,主要来看一下当const修饰类的成员函数时,成员函数有什么特点. 类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函

用 const 限定类的成员函数

类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于改变数据成员的成员函数不能加 const.所以 const 关键字对成员函数的行为作了更加明确的限定:有 const 修饰的成员函数(指 const 放在函数参数表的后面,而不是在函数前面或者参数表内),只能读取数据成员,不能改变数据成员:没有 const 修饰的成员函数,对数据成员则是可读可写的.

c++常对象和常成员函数

常对象: 定义常对象的一般形式为: 类名 const 对象名[(实参表列)]; 也可以把const写在最左面: const 类名 对象名[(实参表列)]; 二者等价. 常对象的所有成员值都不能变,必须先初始化,不能调用非const成员函数 const成员函数: void get_time( ) const ; //将函数声明为const 不能改变类中的成员值们可以访问,若非要改变,可以把成员变量设置为mutable. const是函数类型的一部分,在声明函数和定义函数时都要有const关键字 不

常量对象与常量成员函数

常量对象与常量成员函数来防止修改对象,实现最低权限原则. 可以用关键字const来指定对象是不可修改的,任何修改该对象的企图,都会导致编译错误. 例如:const Time noon(12,0,0);    声明一个Time 类的常量对象noon,并将它初始化为中午12点. C++不允许在常量对象上调用成员函数,除非成员函数本身也被声明为常量.甚至对不会修改对象的成员函数,也是如此,此外,编译器不允许声明常量的成员函数修改对象. 对一般情况下,通常修改对象的构造函数和析构函数而言,它们不允许被声

const关键字对C++成员函数的修饰

const对C++成员函数的修饰分为三种:1. 修饰参数:2. 修饰返回值:3. 修饰this指针.简述一下知识点如下,以后找功夫再完善. 1. 对函数参数的修饰. 1)const只能用来修饰输入参数.输出型参数不能用const来修饰. 2)如果输入参数采用"指针传递",那么加const修饰可以防止意外地改动该指针,起到保护作用. 3)如果输入参数采用"值传递",函数将产生临时变量(局部变量),复制该参数的值并且压入函数栈.函数中使用该参数时,访问的是函数栈中临时变

C++ 中模板类的模板成员函数在类外定义

因为很多书都没讲到这种情况, 曾经有这个问题但一直没答案,所以我一直以为模板类的模板成员函数只能在类内定义,直到我在某个开源代码里看到原来要加两个 template<>  ............ (T_T) template<typename T1> class MyObjectT { public: template<typename T2> void Foo(T2 v); }; template<typename T1> template<typ

C++的空类中默认产生哪些类成员函数

1 class Empty 2 { 3 public: 4 Empty(); 5 Empty(const Empty&); 6 ~Empty(); 7 Empty & operator =(const Empty &); 8 Empty * operator &(); 9 contt Empty * operator &() contst; 10 }

MFC中利用CString和Format成员函数将数字格式化输出

str.Format("格式控制字符串”,输出列表): 格式控制字符串包括格式字符串和非格式字符串,用双引号括起来.其中非格式字符串原样输出. 格式字符串是以%开头的字符串:%[标识][输出最小宽度][精度]转换说明符. 常用转换说明符:d,整型:f,浮点型,双精度:e,指数形式输出,双精度:s,输出字符串,参数为char*指针:等. []内是可以省略的. 标识有 - . + : -表示左对齐,右边补空:+反之. 输出最小宽度,用十进制整数表示. 精度,以.号开始,后跟十进制整数.其含义是如果输

c++中的const参数,const变量,const指针,const对象,以及const成员函数

const 是constant 的缩写,“恒定不变”的意思.被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性.所以很多C++程序设计书籍建议:“Use const whenever you need”. 1.用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const 修饰,否则该参数将失去输出功能.const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const 修饰可以防止意外地