C++类成员的访问权限

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

前面我们在定义类时多次使用到了public 关键字,表示类的成员具有“公开”的访问权限,这节我们就来详细讲解。

C++通过public、protected、private 三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的、受保护的、私有的,被称为成员访问限定符。所谓访问权限,就是你能不能使用该类中的成员。

Java、C# 程序员注意,C++ 中的public、private、protected 只能修

饰类的成员,不能修饰类,C++中的类没有共有私有之分。

在类的内部(定义类的代码内部),无论成员被声明为public、protected 还是private,都是可以互相访问的,没有访问权限的限制。

在类的外部(定义类的代码之外),只能通过对象访问成员,并且通过对象只能访问public 属性的成员,不能访问 private、protected 属性的成员。

本节重点讲解public 和private,protected 将在继承中讲解。

下面通过一个Student 类来演示成员的访问权限:

1.#include

ing namespace std;

3.

4.//类的声明

5.class Student{

6.private://私有的

7.char*m_name;

8.int m_age;

9.float m_score;

10.

11.public://共有的

12.void setname(char*name);

13.void setage(int age);

14.void setscore(float score);

15.void show();

16.};

17.

18.//成员函数的定义

19.void Student::setname(char*name){

20.m_name = name;

21.}

22.void Student::setage(int age){

23.m_age = age;

24.}

25.void Student::setscore(float score){

26.m_score = score;

27.}

28.void Student::show(){

29.cout<

30.}

31.

32.int main(){

33.//在栈上创建对象

34.Student stu;

35.stu.setname("小明");

36.stu.setage(15);

37.stu.setscore(92.5f);

38.stu.show();

39.

40.//在堆上创建对象

41.Student *pstu =new Student;

42.pstu ->setname("李华");

43.pstu ->setage(16);

44.pstu ->setscore(96);

45.pstu ->show();

46.

47.return0;

48.}

运行结果:

小明的年龄是15,成绩是92.5

李华的年龄是16,成绩是96

类的声明和成员函数的定义都是类定义的一部分,在实际开发中,我们通常将类的声明放在头文件中,而将成员函数的定义放在源文件中。

类中的成员变量m_name、m_age 和m_ score 被设置成private 属性,在类的外部不能通过对象访问。也就是说,私有成员变量和成员函数只能在类内部使用,在类外都是无效的。

成员函数setname()、setage() 和setscore() 被设置为public 属性,是公有的,可以通过对象访问。

private 后面的成员都是私有的,直到有public 出现才会变成共有的;public 之后再无其他限定符,所以public 后面的成员都是共有的。

一眼看出这是成员变量,又可以和成员函数中的形参名字区分开。

因为三个成员变量都是私有的,不能通过对象直接访问,所以必须借助三个public 属性的成员函数来修改它们的值。下面的代码是错误的:

1.Student stu;

2.//m_name、m_age、m_score 是私有成员变量,不能在类外部通过对象访问

3.stu.m_name ="小明";

4.stu.m_age =15;

5.stu.m_score =92.5f;

6.stu.show();

简单地谈类的封装

private 关键字的作用在于更好地隐藏类的内部实现,该向外暴露的接口(能通过对象访问的成员)都声明为public,不希望外部知道、或者只在类内部使用的、或者对外部没有影响的成员,都建议声明为private。

根据C++软件设计规范,实际项目开发中的成员变量以及只在类内部使用的成员函数(只被成员函数调用的成员函数)都建议声明为private,而只将允许通过对象调用的成员函数声明为public。

另外还有一个关键字protected,声明为protected 的成员在类外也不

能通过对象访问,但是在它的派生类内部可以访问,这点我们将在后续章

节中介绍,现在你只需要知道protected 属性的成员在类外无法访问即

可。

有读者可能会提出疑问,将成员变量都声明为private,如何给它们赋值呢,又如何读取它们的值呢?

我们可以额外添加两个public 属性的成员函数,一个用来设置成员变量的值,一个用来修改成员变量的值。上面的代码中,setname()、setage()、setscore() 函数就用来设置成员变量的值;如果希望获取成员变量的值,可以再添加三个函数getname()、getage()、getscore()。

量的名字。

除了set 函数和get 函数,在创建对象时还可以调用构造函数来初始化各个成员变量,我们将在《C++构造函数》一节中展开讨论。不过构造函数只能给成员变量赋值一次,以后再修改还得借助set 函数。

这种将成员变量声明为private、将部分成员函数声明为public 的做法体现了类的封装性。所谓封装,是指尽量隐藏类的内部实现,只向用户提供有用的成员函数。

有读者可能会说,额外添加set 函数和get 函数多麻烦,直接将成员变量设置为public

相关文档
最新文档