1.const数据成员
在c++中不允许改变的数据成员,我们将它声明为const成员。
const成员的声明形式是
const+类型+变量名;
const成员必须用初始化表的形式进行初始化。
如:
class A
{
public:
A();
A(int m,int y);
void display();
private:
int x;
const int y;
};
A::A() :y(2)
{
cout << "-------************----------" << endl;
cout << "A的没有参数的构造函数被调用了" << endl;
x = 1;
cout << " -------************----------" << endl;
}
A::A(int m,int n) :y(n)
{
x = m;
cout << "-------************----------" << endl;
cout << "A有一个参数的构造函数被调用了" << endl;
cout << " -------************----------" << endl;
}
void A::display()
{
cout << "☆☆☆☆☆☆☆☆" << endl;
cout << "A中数据成员x的值是" << x << endl;
cout << "A中数据成员y的值是" << y << endl;
cout << "☆☆☆☆☆☆☆☆" << endl;
}
2.const成员函数
const函数的声明形式是
返回类型+函数名()+const;
const成员函数不能改变数据成员的值,也不能调用非const成员函数。
3.const对象
如果对象中的数据成员不允许被改变,那么久将它声明称const对象
声明格式是
const+类名+对象名;
类的声明和定义如下:
#include "stdafx.h"
#include<iostream>
#include<string>//写头文件的目的是为了提醒读者别忘了加string这个
using namespace std;
class Teacher
{
public:
Teacher(string name, int age, string course);
Teacher(Teacher &t);
void set(int age, string course);
void display()const;
private:
const string teaname;
int teacAge;
string teacCourse;
};
Teacher::Teacher(string name, int age, string course) :teaname(name)
{
teacAge = age;
teacCourse = course;
}
Teacher::Teacher(Teacher &t) : teaname(t.teaname)
{
teacAge = t.teacAge;
teacCourse = t.teacCourse;
}
void Teacher::set(int age, string name)
{
teacAge = age;
teacCourse = name;
}
void Teacher::display()const
{
cout << "教师姓名\t" << teaname << endl;
cout << "教师年龄\t" << teacAge << endl;
cout << "教授科目\t" << teacCourse << endl;
cout << endl;
}
主函数中有如下代码:
Teacher teac1("Zhang", 59, "操作系统");
const Teacher teac2(teac1);
teac1.display();
teac2.display();
这里用了一个复制构造函数
Teacher teac2(teac1);
便是调用了复制构造函数
Teacher::Teacher(Teacher &t) : teaname(t.teaname)
{
teacAge = t.teacAge;
teacCourse = t.teacCourse;
}
先不用关注它