C++访问控制

来源:互联网 发布:手机铃声放大软件 编辑:程序博客网 时间:2024/05/21 17:51

在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;}