访问数据成员仅取决于该数据成员的访问控制权限,如果它是public的,那么可以使用直接成员访问 (.)
运算符轻松地访问数据成员。
如果数据成员被定义为private或protected,那么我们不能直接访问数据变量。然后我们必须创建特殊的public 成员函数 来访问、使用或初始化private和protected数据成员,这些成员函数也称为 Accessors 和 Mutator 方法或 getter(获取) 和 setter(设置) 函数。
下面这个示例,向你展示如何使用点 (.) 运算符和类的实例来初始化和使用public数据成员。
class Student
{
public:
int rollno;
string name;
};
int main()
{
Student A;
Student B;
// 为对象A成员赋值
A.rollno=1;
A.name="Adam";
// 为对象B成员赋值
B.rollno=2;
B.name="Bella";
cout <<"A的Name和Rollno分别为: "<< A.name << "-" << A.rollno;
cout <<"B的Name和Rollno分别为:"<< B.name << "-" << B.rollno;
}
以上实例输出结果:
A的Name和Rollno分别为: Adam-1 B的Name和Rollno分别为: Bella-2
要访问、使用和初始化private数据成员,你需要创建 getter(获取) 和 setter(设置) 函数,以获取和设置数据成员的值。
setter 函数将通过为设置函数传递参数给私有数据成员赋值,getter 函数将返回要使用的私有数据成员的值, getter 和 setter 函数都必须定义为 public。
示例:
class Student
{
private: // 私有数据
int rollno;
public:
// 公有函数来获取值 - getter
int getRollno()
{
return rollno;
}
// 公有函数来设置值 - setter
void setRollno(int i)
{
rollno=i;
}
};
int main()
{
Student A;
A.rollono=1; // 编译报错
cout<< A.rollno; //编译报错
A.setRollno(1); //Rollno赋值为1
cout<< A.getRollno(); //输出 1
}
这就是我们使用 getter 和 setter 方法访问和使用任何类的私有数据成员的方式,后面的章节中我们将更详细地学习这些。
protected数据成员,可以在当前类的子类中使用点(.)操作符直接访问,对于非子类,我们必须按照与访问私有数据成员相同的方法。