您的位置:首页 > 其它

类的其他成员

2015-08-16 16:49 190 查看
在类定义中,除了可以指定成员的访问权限外,还可以定义各种特殊用途的成员。

一、常成员

在类中,定义常成员用const约束。常数据成员是指数据成员在实例化被初始化后约束为只读;常成员函数是指成员函数的this指针被约束为指向常量的常指针,在函数体内不能修改数据成员的值。

1、常数据成员

在C++的类定义中,const可以约束基本类型的数据成员为常数据成员。因为类对象要通过执行构造函数才能建立存储空间,所以,用构造函数实现常数据成员值的初始化是必须的。在C++语言中,使用构造函数参数初始式对常数据成员进行初始化。

(1)常数据成员可以在构造函数中直接用常量进行初始化,这样,每个对象建立的常数据成员都有相同的值。

//由构造函数直接用常量初始化常数据成员
#include<iostream>
using namespace std;
class Mclass
{
public:
int k;
const int M;//说明常数据成员
Mclass():M(5)//用初始式对常数据成员赋值
{}
void testFun()
{
//M++;错误,不能在成员函数中修改常数据成员
k++;
}
};
int main()
{
Mclass t1, t2;
t1.k = 123;
//t1.M = 123;错误,不能在类外修改常数据成员
cout << "t1.k=" << t1.k << " " << "t1.M=" << t1.M << endl;
t2.k = 200;
t2.testFun();
cout << "&t1.M=" << &t1.M << endl;
cout << "t2.k=" << t2.k << " " << "t2.M=" << t2.M << endl;
cout << "&t2.M=" << &t2.M << endl;
}
(2)另一种对常数据成员进行初始化的方法是,使用带参数的构造函数,创建对象时,用实际参数对常数据成员赋值。这样,每一个对象的常数据成员就可以有不同的初始值。

//用带参数的构造函数初始化常数据成员
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<cstring>
using namespace std;
struct Date
{
int year, month, day;
};
class Student
{
public:
Student(int y,int m,int d,int num = 0,char *pname = "noname");
void PrintStudent()const;//常成员函数
private:
const int code;//常数据成员
char name[20];
Date birthday;//结构数据成员
};
void Student::PrintStudent()const
{
cout << "序号:" << code << "\t姓名:" << name << "\t出生日期:" << birthday.year << "-" << birthday.month << "-" << birthday.day << endl;
}
//带参数的构造函数完成数据成员的初始化
Student::Student(int y, int m, int d, int num, char *pname) :code(num)
{
strcpy(name, pname);
name[sizeof(name) - 1] = '\0';
birthday.year = y;
birthday.month = m;
birthday.day = d;
}
int main()
{
Student stu1(1990, 3, 21, 1001, "陈春");
stu1.PrintStudent();
Student stu2(1984, 10, 1, 1002, "张庆华");
stu2.PrintStudent();
}
2、常对象

若在定义对象的说明语句以const作前缀,则该对象称为常对象。这个对象的全部数据成员在作用域中约束为只读。

//常对象测试
#include<iostream>
using namespace std;
class T_class
{
public:
int a, b;
T_class(int i, int j)
{
a = i;
b = j;
}
};
int main()
{
const T_class t1(1, 2);
T_class t2(3, 4);
//t1.a=7;
//t1=b=9;//错误,不能修改常对象的数据成员
t2.a = 9;
t2.b = 7;
cout << "t1.a=" << t1.a << " " << "t1.b=" << t1.b << endl;
cout << "t2.a=" << t2.a << " " << "t2.b=" << t2.b << endl;
}
3、常成员函数

常成员函数的this指针被约束为指向常量的常指针。由于this指针隐含定义,所以常成员函数在函数头以关键字const作后缀。例如:

class X
{
int a;
int f()
{
return a++;
}
int g()const//错误,常成员函数不能修改数据成员
{
return a++;
}
};
在类X中,成员函数g首部以关键字const作后缀,称为常成员函数。相当于常成员函数的this指针类型为:

const X* const this ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: