C++类成员的访问权限
C++通过public、protected、private三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。
C++ 中的 public、private、protected 只能修饰类的成员,不能修饰类,C++中的类没有共有私有之分。
在类的内部(定义类的代码内部),无论成员被声明为 public、protected 还是 private,都是可以互相访问的,没有访问权限的限制。
在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问public属性的成员,不能访问 private、protected 属性的成员。
#include<iostream>
using namespace std;
//类的声明
class Student
{
private: //私有
char *m_name;
intm_age;
float m_score;
public://共有
void setname(char *name);
void setage(int age);
void setscore(float score);
void show();
};
//成员函数的定义
void Student::setname(char *name) {m_name=name;}
void Student::setage(int age) {m_age=age;}
void Student::setscore(float score) {m_score=score;}
void Student::show()
{ cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;}
int main()
{
//在栈上创建对象
Student stu;
stu.setname("栀子花");
stu.setage(15);
stu.setscore(92.5f);
stu.show();
//在堆上创建对象
Student *pstu = new Student;
pstu -> setname("樱花");
pstu -> setage(16);
pstu -> setscore(96);
pstu -> show();
return 0;
}
i. 类中的成员变量 m_name、m_age 和m_ score 被设置成 private 属性,在类的外部不能通过对象访问。也就是说,私有成员变量和成员函数只能在类内部使用,在类外都是无效的。
ii. 成员函数 setname()、setage() 和 setscore() 被设置为 public 属性,是公有的,可以通过对象访问。
iii. 成员变量大都以m_开头,这是约定成俗的写法,不是语法规定的内容。以m_开头既可以一眼看出这是成员变量,又可以和成员函数中的形参名字区分开。
iv. 因为三个成员变量都是私有的,不能通过对象直接访问,所以必须借助三个public 属性的成员函数来修改它们的值。
v. 给成员变量赋值的函数通常称为 set 函数,它的名字通常以set开头,后跟成员变量的名字;读取成员变量的值的函数通常称为 get 函数,它的名字通常以get开头,后跟成员变量的名字。
vi. 声明为 private 的成员和声明为 public 的成员的次序任意,既可以先出现 private 部分,也可以先出现public 部分。如果既不写 private 也不写 public,就默认为 private。