C/C++中的常成员函数

代码:

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 class A{
 6     public:
 7         void func1(){
 8             cout<<"func1"<<endl;
 9         }
10         void func1()const{
11             cout<<"const func1"<<endl;
12         }
13         void func2()const{
14             cout<<"const func2"<<endl;
15         }
16         void func3(){
17             cout<<"func3"<<endl;
18         }
19 };
20
21 int main(){
22
23     A a1;
24     a1.func1();
25     a1.func2();
26
27     A const a2;
28     a2.func1();
29     //a2.func3();编译错误
30
31     return 0;
32 }

输出:

func1
const func2
const func1

分析:

1. 常对象只能调用常成员函数。
2. 普通对象可以调用全部成员函数。
3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针。

4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针。
5. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值;
   在X类的const成员函数中,this指针的类型为:const X* const, 这说明this指针所指向的这种对象是不可修改的(即不能对这种对象的数据成员进行赋值操作);
6. 由于this并不是一个常规变量,所以,不能取得this的地址。

更详细的解释:http://blog.csdn.net/zhuyingqingfen/article/details/31751111

需要注意的是,常成员函数不能修改对象的成员变量。

时间: 2024-10-17 09:06:06

C/C++中的常成员函数的相关文章

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

先明确几个概念: 1. 常对象只能调用常成员函数. 2. 普通对象可以调用全部成员函数. 3. 当对一个对象调用成员函数时,编译程序先将对象的地址赋给this指针,然后调用成员函数,每次成员函数存取数据成员时,由隐含使用this指针.4. 当一个成员函数被调用时,自动向它传递一个隐含的参数,该参数是一个指向这个成员函数所在的对象的指针. 5. 在C++中,this指针被隐含地声明为: X *const this,这意味着不能给this 指针赋值:   在X类的const成员函数中,this指针的

C++点滴----关于类常成员函数

关于C++中,类的常成员函数 声明样式为:   返回类型 <类标识符::>函数名称(参数表) const 一些说明: 1.const是函数声明的一部分,在函数的实现部分也需要加上const 2.const关键字可以重载函数名相同但是未加const关键字的函数 3.常成员函数不能用来更新类的成员变量,也不能调用类中未用const修饰的成员函数,只能调用常成员函数.即常成员函数不能更改类中的成员状态,这与const语义相符. 例一:说明const可以重载函数,并且实现部分也需要加const #in

C++常成员函数 - const 关键字

转自:http://www.cnblogs.com/this-543273659/archive/2011/07/18/2109922.html 一.常成员函数详解 声明:<类型标志符>函数名(参数表)const: 说明: (1)const是函数类型的一部分,在实现部分也要带该关键字. (2)const关键字可以用于对重载函数的区分. (3)常成员函数不能更新类的成员变量,也不能调用该类中没有用const修饰的成员函数,只能调用常成员函数. A.通过例子来理解const是函数类型的一部分,在实

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

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

第五周项目1-体验常成员函数

设计平面坐标点类,计算两点之间距离.到原点距离.关于坐标轴和原点的对称点等.在设计中,由于求距离.求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改. /* * Copyright (c) 2015,烟台大学计算机学院 * All right reserved. * 作者:邵帅 * 文件:Demo.cpp * 完成时间:2015年04月08日 * 版本号:v1.0 */ #include <iostream> #include <

项目一:体验常成员函数

[项目1-体验常成员函数] 设计平面坐标点类,计算两点之间距离.到原点距离.关于坐标轴和原点的对称点等.在设计中,由于求距离.求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改. class CPoint { private: double x; // 横坐标 double y; // 纵坐标 public: CPoint(double xx=0,double yy=0); double Distance1(CPoint p) const

【项目1-体验常成员函数】

设计平面坐标点类,计算两点之间距离.到原点距离.关于坐标轴和原点的对称点等.在设计中,由于求距离.求对称点等操作对原对象不能造成任何改变,所以,将这些函数设计为常成员函数是合适的,能够避免数据成员被无意更改. ?class CPoint { private:   double x;  // 横坐标   double y;  // 纵坐标 public:   CPoint(double xx=0,double yy=0);   double Distance1(CPoint p) const; /

体验常成员函数

输入代码: /* * Copyright (c) 2015, 烟台大学计算机学院 * All rights reserved. * 文件名称:sum123.cpp * 作 者:林海云 * 完成日期:2015年 4月7日 * 版 本 号:v2.0 * * 问题描述: 设计平面坐标点类,计算两点之间的距离.到原点距离.关于坐标轴和原点的对称点等. 在设计中,由于求距离.求对称点等操作对原对象不能造成任何改变,所以,将这些函 数设计为常成员函数是合适的,能够避免数据成员被无意更改. * 输入描述:输入

const常对象成员与常成员函数

#include <iostream>#include <string>using namespace std;class pt{public: pt(int a,int b){this->x=a,this->y=b;} int getX() const {return this->x;} //此处必须加const(关键),否则A.getX()将无法正常调用 int getY() const {return this->y;} //因否则的话A.getX()