C++之类的常成员

类的常成员与类的静态成员相似。类的常成员包括常数据成员和常成员函数。

常数据成员

在类的成员定义中,使用修饰符const说明的数据成员称为常数据成员。常数据成员必须初始化,并且它的数值不能被更新。常数据成员是通过构造函数的成员初始化列表进行初始化的。

还是举例说明常数据成员:

<span style="font-size:18px;">#include <iostream.h>
class A
{
public:
	A(int i);//定义的构造函数
	void Print();//函数体在类外的一般成员函数
	const int &r;//整型常数据成员的引用
private:
	const int a;//一般的常数据成员
	static const int b;//静态的常数据成员
};
const int A::b=15;//给静态的常数据成员赋值
A::A(int i):a(i),r(a)//通过构造函数的初始化列表进行初始化
{
}
void A::Print()//一般成员函数的函数体
{
	cout<<a<<","<<b<<","<<r<<endl;
}
void main()
{
	A a1(50),a2(30);//定义有参数的两个对象
	a1.Print();//通过对象来引用成员函数
	a2.Print();
}</span>

分析:(1)该程序中定义了三个常数据成员,分别为const  int  &r;    const   int   a;   static   const  int   b;

(2)一般的常数据成员的初始化需要构造函数初始化列表进行初始化。

(3)通过使用构造函数对两个对象进行初始化,把i赋值给a,再把a赋值给r。在这个过程中,一旦赋值就不再更新,b的数值也是被赋值后一直保持不变。因此结果为:50,15,50和30,15,30.

常成员函数

在类的成员函数中,使用const修饰符说明的成员函数称为常成员函数。在程序中,只有常成员函数才被常对象引用。常成员函数的定义格式为:<类型说明符>  <函数名>  ( <参数表>)  const 其中,在该函数的实现部分也要加const。

举例来说明常成员函数:

<span style="font-size:18px;">#include <iostream.h>
class B
{
public:
	B(int i,int j)//定义的带两个参数的构造函数
	{ b1=i;b2=j;}
	void Print();//函数体在类外的一般成员函数
	void Print() const;//函数体在类外的常成员函数
private:
	int b1,b2;
};
void B::Print()//一般成员函数的函数体
{
	cout<<b1<<";"<<b2<<endl;
}
void B::Print() const//常成员函数的函数体
{
    cout<<b1<<":"<<b2<<endl;
}
void main()
{
	B bb1(12,5);//定义的一般对象
	bb1.Print();//通过对象来引用成员函数
	const B bb2(10,9);//定义的类的常对象,只能引用常成员函数
	bb2.Print();
}</span>

分析(1)程序中出现了两个重载函数,void Print()和void Print() const。一个是一般的成员函数,后者是常成员函数。

(2)通过调用构造函数进行对象的初始化,结果为12;5和10:9

时间: 2024-08-05 20:58:56

C++之类的常成员的相关文章

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

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

类之静态成员以及常对象、常成员

一.静态成员:static修饰,每个类只有一份拷贝,为所有该类的对象所共用. 1.静态数据成员: 类内声明.类外初始化.和全局变量一样,在数据段里分配内存. eg: class A{ static int co; }; int A::co=0; 2.静态成员函数: 1).静态成员函数专门用来存取类的静态成员,不可访问非静态成员,没有this指针.由static在类内声明,可以在类外定义,此时不需要static作为前缀. eg: class A{ static int co; static int

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

C++,常成员函数

#include <iostream> using namespace std; class Test { public: int x; int y; void const_m1() const; void const_m2() const; void m3(); void m4(); }; /** * //1常成员函数不能修改成员变量的值 * //2常成员函数只能调用常成员函数,不能调用普通成员函数 * //3普通成员函数可以调用常成员函数 */ void Test::const_m1(vo