有关常对象和常对象成员
在c++编程中如果要让所编的程序更安全,就要用到一些保护机制。
常对象
即对象中的所有数据成员在引用时不能被改变的对象。定义如下:
class Student{
public:
int a;
int b;
int c;
public:
Student(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
}
void display()
{
cout<<a<<" "<<b<<" "<<c<<" "<<endl;
}
};
Student stu1(1,2,3);
const Student stu2(3,4,5);
stu1.display();//可以执行
stu2.display();//编译错误
在定义了一个长对象后,如果成员函数要引用常对象中的成员,则引用常对象成员的成员函数必须在声明类时被声明成常函数,常函数只能引用成员的值而无法修改成员的值。在函数被声明为常函数后,在引用成员变量时,就会确保在函数执行过程中不会修改成员变量的值,保证了对象数据成员的的安全。
注意:长对象只能调用常成员函数而不能调用非常成员函数。
那么在常对象中真的一点也无法改变其中的成员变量吗?
当然不是,如果必须要修改长对象中成员变量的值可以在声明相应的类的时候用mutable关键字修饰你想在使用对象过程中要改变的成员变量,如:
mutalble int count;
那么在随后的使用对象过程中可以通过const修饰的成员函数修改count的值;
/
常数据成员
常数据成员在声明类时在成员前加const关键字
如:
const int hour;
常数据成员通过创建对象时由构造函数初始化,在对象创建后 其值将不可改变。而通过构造函数初始化时只能通过初始化列表进行初始化,不能在函数体内部通过赋值语句进行初始化,因为常成员变量是不能被赋值的。
如:
Time::Time(int h):hour(h){};//正确,通过初始化列表初始化成员变量
Time::Time(int h)
{
//hour=h; //错误
}
在c++编程中如果要让所编的程序更安全,就要用到一些保护机制。
常对象
即对象中的所有数据成员在引用时不能被改变的对象。定义如下:
class Student{
public:
int a;
int b;
int c;
public:
Student(int a,int b,int c)
{
this->a=a;
this->b=b;
this->c=c;
}
void display()
{
cout<<a<<" "<<b<<" "<<c<<" "<<endl;
}
};
Student stu1(1,2,3);
const Student stu2(3,4,5);
stu1.display();//可以执行
stu2.display();//编译错误
在定义了一个长对象后,如果成员函数要引用常对象中的成员,则引用常对象成员的成员函数必须在声明类时被声明成常函数,常函数只能引用成员的值而无法修改成员的值。在函数被声明为常函数后,在引用成员变量时,就会确保在函数执行过程中不会修改成员变量的值,保证了对象数据成员的的安全。
注意:长对象只能调用常成员函数而不能调用非常成员函数。
那么在常对象中真的一点也无法改变其中的成员变量吗?
当然不是,如果必须要修改长对象中成员变量的值可以在声明相应的类的时候用mutable关键字修饰你想在使用对象过程中要改变的成员变量,如:
mutalble int count;
那么在随后的使用对象过程中可以通过const修饰的成员函数修改count的值;
/
常数据成员
常数据成员在声明类时在成员前加const关键字
如:
const int hour;
常数据成员通过创建对象时由构造函数初始化,在对象创建后 其值将不可改变。而通过构造函数初始化时只能通过初始化列表进行初始化,不能在函数体内部通过赋值语句进行初始化,因为常成员变量是不能被赋值的。
如:
Time::Time(int h):hour(h){};//正确,通过初始化列表初始化成员变量
Time::Time(int h)
{
//hour=h; //错误
}