目录
- 常对象
- 常对象特点
- 常数据成员
- 常成员函数
- 对象的常引用
常对象
把对象定义为常对象,对象中的数据成员就是常变量,在定义时必须带实参(或者有缺省构造函数)作为数据成员的初值。
const Person p1(3,4);//定义了一个常对象
常对象特点
1.常对象不能调用非常成员函数,而只能调用常成员函数。
- 普通对象
#include <iostream>
using namespace std;
class Person
{
public:
Person(int a, int b) : m_a(a), m_b(b) {};
void print()
{
cout << "普通函数调用" << endl;
}
void print() const
{
cout << "常函数调用" << endl;
}
private:
int m_a;
int m_b;
};
int main()
{
Person p1(20, 30);
p1.print();
return 0;
}
- 常对象
#include <iostream>
using namespace std;
class Person
{
public:
Person(int a, int b) : m_a(a), m_b(b) {};
void print()
{
cout << "普通函数调用" << endl;
}
void print() const
{
cout << "常函数调用" << endl;
}
private:
int m_a;
int m_b;
};
int main()
{
const Person p1(20, 30);
p1.print();
return 0;
}
2.普通对象可以调用常函数
常数据成员
形式:
const 类型 数据成员名 // 将类中的数据成员声明为只读
注意:
只能通过带参数初始化表的构造函数对常数据成员进行初始化
常成员函数
形式:
类型 函数名(形参表) const
{
}
利用关键字const声明函数为常成员函数。
在声明函数原型和定义函数时都要用到const。
注意:
常成员函数只能引用但不能修改对象的数据成员。
也不能调用非常数据成员。
一般成员函数可以访问或修改本类中的非const数据成员。
常对象只能调用常成员函数
对象的常引用
对象常引用无法更改对象的数据成员
#include <iostream>
using namespace std;
class Time
{
public:
Time(int, int, int);
int hour;
int minute;
int sec;
};
Time::Time(int h, int m, int s)
{
hour = h;
minute = m;
sec = s;
}
void fun(const Time& t)
{
t.hour = 18;//报错,因为常引用不允许修改
}
int main()
{
Time t1(10, 13, 56);
cout << t1.hour << endl;
fun(t1);
cout << t1.hour << endl;
return 0;
}