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

关于C++中,类的常成员函数

声明样式为:   返回类型 <类标识符::>函数名称(参数表) const

一些说明:

1、const是函数声明的一部分,在函数的实现部分也需要加上const

2、const关键字可以重载函数名相同但是未加const关键字的函数

3、常成员函数不能用来更新类的成员变量,也不能调用类中未用const修饰的成员函数,只能调用常成员函数。即常成员函数不能更改类中的成员状态,这与const语义相符。

例一:说明const可以重载函数,并且实现部分也需要加const

#include <iostream>
using namespace std;

class TestA
{
public:
  TestA(){}
  void hello() const;
  void hello();
};
void TestA::hello() const
{
  cout << "hello,const!" << endl;
}
void TestA::hello()
{
  cout << "hello!" << endl;
}

int main()
{
  TestA testA;
  testA.hello();
  const TestA c_testA;
  c_testA.hello();
}

运行结果:

例二:用例子说明常成员函数不能更改类的变量,也不能调用非常成员函数,但是可以调用常成员函数。非常成员函数可以调用常成员函数

#include <iostream>
using namespace std;

class TestA
{
public:
  TestA(){}
  TestA(int a, int b)
  {
    this->a = a;
    this->b = b;
  }
  int sum() const;
  int sum();
  void helloworld() const;
  void hello();
private:
  int a,b;
};
int TestA::sum() const
{
  //this->a = this->a + 10;//修改了类变量,编译时会报错误1
  //this->b = this->b + 10;//同上
  //  hello();  //调用了非成员函数,编译时报错误2
  return a + b;
}
int TestA::sum()
{
  this->a = this->a + 10;
  this->b = this->b + 10;  helloworld();   //可以调用常成员函数
  return a + b;
}
void TestA::helloworld() const
{
  cout << "hello,const" << endl;
}
void TestA::hello()
{
  cout << "hello" << endl;
}
int main()
{
  TestA testA;
  testA.sum();
  const TestA c_testA;
  c_testA.sum();
}

当注释去掉时,编译会报错误1,表示类的常成员函数不能修改类的变量。

错误2如下,表示常成员函数不能调用非常成员函数

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

C++点滴----关于类常成员函数的相关文章

类的成员函数后面加const有什么用(c++常问问题六)

每个类的成员函数都默认传入this指针,成员函数后面加了const后该成员函数将不能修改该类的成员了 class cat { public: cat(){}; string getName() const { this->m_strName = “”;//错误,const this不允许修改成员 return this->m_strName; //正确,没修改 } protected: string m_strName; }

C++类const成员函数

c++类中可以用const关键字来声明不修改对象的成员函数,它使用时需要注意: 1.常量对象只能调用const成员函数 2.非常量对象可以调用const成员函数 以下列代码为例,来解释: 1 class Person{ 2 public: 3 void print(){ 4 cout<<"I am a common function!"<<endl; 5 } 6 void show()const{ 7 cout<<"I am a const

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&l

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

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

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

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

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; /