在C语言的结构体中,我们定义的结构体变量可以访问结构体里面的任意一个变量,但是在C++的类里面,我们可以设置他的访问权限,哪些可以更改,哪些不能更改,不能更改的变量可以通过哪些特殊途径去修改。这里我们先来认识一下C++的访问权限有哪几种。
private:
只能由 1. 该类中的函数、2. 其友元函数 访问。
不能被任何其他访问,该类的对象也不能访问。
protected:
可以被 1. 该类中的函数、2. 子类的函数、3. 其友元函数 访问。
但不能被该类的对象访问。
public:
可以被 1. 该类中的函数、2. 子类的函数、3. 其友元函数访问、4. 该类的对象 访问。
注:
友元函数包括3种:
设为友元的普通的非成员函数;
设为友元的其他类的成员函数;
设为友元类中的所有成员函数。
下面我们以一段程序来说明“private ”和 “public ”的区别,“protected”我们后面文章再介绍。
程序内容跟上一章一致,但是我们在类里面定义了哪些属于“private ”哪些属于 “public ”,它们的作用以及访问权限又有哪些,代码中还展示了当遇到类内部变量名一致的情况下如何区分开来,代码做了非常详细的注解来说明,如下:
#include <stdio.h>
class Person{
/* 私有成员 */
private:
/* 为什么要把它们设置为私有呢?是为了避免用户随意修改或设置错误的值,可以在public的方法中加以限制 */
char *name;
int age;
char *work;
/* 公开成员 */
public:
/* 这些公开的方法可以用于设置该类中的私有变量,提供一个修改窗口给用户,用户不能直接访问上面的私有成员 */
/* 形参为了保证可读性我们一般会设置为name,但如何避免两个变量重叠冲突呢? */
void setName(char *name)
{
/* 加上this可以表明是当前类里面参数 */
this->name = name;
}
int setAge(int age)
{
/* 加以限制,避免出错设置,把年龄限制在0-150 */
if(age<0 || age>150)
{
this->age = 0;
return -1;
}
this->age = age;
return 0;
}
void setWork(char *work)
{
/* 加上this可以表明是当前类里面参数 */
this->work = work;
}
void printInfo(void)
{
printf("name = %s, age = %d, work = %s\n", name, age, work);
}
};
int main(int argc, char **argv)
{
/* per称为Person这个类的对象 */
Person per;
/* 通过公开的函数来设置私有成员 */
per.setName("Zhangsan");
per.setAge(200);/* 形参为200则输入不在范围内,类里面加了限制会返回-1 */
per.setWork("doctor");
per.printInfo();
return 0;
}