关于C++ const成员的一些细节

1.const对象,只能调用const成员函数

2.非const对象可以调用const成员函数和非const成员函数

  a.如果类同时具有const重载版本的成员函数和非重载版本,那么该类实例化的非const对象调用该成员函数的时候,会调用非重载版本。

  b.如果类只有const版本的成员,那么实例化的非const对象会调用const版本的成员

实例如下:

class A
{
public:
 A(){}
 ~A(){}
void
foo()
 {
  cout << "foo() of A" <<
endl;
 }
 void foo() const
 {
  cout
<< "const foo() of A" << endl;
 }
};

int main()
{
const A a;
 a.foo();
 A
a1;
 a1.foo();

return 0;
}

程序运行结果:

const foo() of A

foo() of A

class A
{
public:
 A(){}
 ~A(){}
 void foo()
const
 {
  cout << "const foo() of A" <<
endl;
 }
};

int main()
{
 A a;
 a.foo();

return 0;
}

运行结果:

const foo() of A

关于C++ const成员的一些细节

时间: 2024-10-08 09:45:30

关于C++ const成员的一些细节的相关文章

类的const成员

类的const成员包括const数据成员和const成员函数: 1.const数据成员: 和普通的const变量一样,定义时初始化,且不能修改 2.const成员函数: const成员函数只能访问其他的const成员函数,而不能访问非const成员函数 const可以修饰static数据成员,在定义时初始化,但仍要在类外进行声明 const成员函数不能修改类的对象,即不能修改数据成员,但当数据成员被mutable修饰时,可以修改 const不能修饰static成员函数,因为const表示不修改类

拷贝构造函数和const成员函数

实验原因 说明如何使用const描述保护类数据不会意外修改. 编译环境 vc6sp6 + win7x64 工程下载 copyConstruction_constMemberFunction.zip 使用非const成员函数,引起的拷贝构造函数报错 [cpp] view plain copy class CStudent { /// 常量定义 public: enum {NAME_SIZE_MAX = 64}; /// 构造, 拷贝构造, 析构函数 public: CStudent(); CStu

C++中类const、static、static const成员变量

#include<iostream> using namespace std; class Test { private: const int a;  //const 成员变量只能在构造函数的成员初始化列表中初始化,不能在函数体中和其他地方 static int b; //static 成员变量需要在全局范围内初始化,格式: 类型名 类名::变量名 = 值 static const int c;//static const 成员变量需要在全局范围内初始化,格式:类型名 类名::变量名 = 值

const成员函数

本文结论: const对象.指向const对象的指针或引用只能用于调用其const成员函数. 实例说明: class A { public: void mf1(){ cout<<"Function Call"<<endl; } void mf2() const{ cout<<"const Function Call"<<endl;} }; int main() { A a; a.mf1(); //ok a.mf2();

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

const成员或者引用成员必须使用构造函数初始化列表的方式

#include<iostream.h> class A { const int a; int b; }; void main() { A obja; }编译出现如下错误:error C2512: 'A' : no appropriate default constructor available;如果将const去掉就没错了! #include<iostream.h> class A { public: const int a; int b; A(int x):a(x){} };

C++基础知识---static const成员变量的初始化

为了将常量的作用域限制于class内,你必须让让成为class的一个成员:而为确保此常量之多只有一份实体,你必须让让成为一个static成员: Class Gameplayer { Private: Staticconst int Number = 5;  //常量声明式 Intscores[Number];  //使用该常量 }: 然而你所看到的是Number的声明式而非定义式.通常C++要求你对你所使用的任何东西提供一个定义式,但如果他是个class专属常量又是static且为整数类型,则需

mutable用于修改const成员函数中的成员变量

http://no001.blog.51cto.com/1142339/389840/ mutalbe的中文意思是“可变的,易变的”,跟constant(既C++中的const)是反义词. 在C++中,mutable也是为了突破const的限制而设置的.被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中. 我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的.但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式、auto_ptr与单例模式、const成员函数、const 对象、mutable修饰符

C++ Primer 学习笔记_24_类与数据抽象(10)--static 与单例模式.auto_ptr与单例模式.const成员函数.const 对象.mutable修饰符 前言 [例]写出面向对象的五个基本原则? 解答:单一职责原则,开放封闭原则,依赖倒置原则,接口隔离原则和里氏替换原则 里氏替换原则:子类型必须能够替换他们的基类型. 设计模式分为三种类型:创建型模式.结构型模式和行为型模式 一.static 与单例模式 1.单例模式 单例模式的意图:保证一个类仅有一个实例,并提供一个访问它