类的其他成员

来源:互联网 发布:php代码批量替换工具 编辑:程序博客网 时间:2024/06/09 05:02

    在类定义中,除了可以指定成员的访问权限外,还可以定义各种特殊用途的成员。

    一、常成员

    在类中,定义常成员用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 ;

0 0
原创粉丝点击