C++里public,protected,private的意义和用处

一,C++里public,protected,private的意义和用处
1,public,protected,private可以用来控制类变量和函数的访问权限。
     类对象可以访问public成员变量和函数,不能访问protected,private成员变量和函数。
     但在类内部这三种类型的变量和函数都是可以访问的。
     我们用下面的代码来说明
     

#include <iostream>

class Player
{
public://公有函数
    Player() {
        //在类内部可以访问public,protected,private修饰的变量和函数
        id = 101;
        sex = 1;
        age = 20;
        std::cout << "id=" << GetID() << std::endl;
        std::cout << "sex=" << GetSex() << std::endl;
        std::cout << "age=" << GetAge() << std::endl;
    }
    int GetID()const { return id; }
protected://保护函数
    int GetSex()const { return sex; }
private://私有函数
    int GetAge()const { return age; }
public://公有成员 
    int id = 100;
protected://保护成员
    int sex = 0;
private://私有成员
    int age = 18;

};

int main()
{
    Player andy;
    //类对象可以访问public修饰的变量
    andy.id = 200;
    //类对象可以访问public修饰的函数
    std::cout << "id=" << andy.GetID() << std::endl;

    //以下编译不通过,类对象不能访问protected,private修饰的变量和函数
   // andy.sex = 0;
   // std::cout << "sex=" << GetSex() << std::endl;

   // andy.age = 22;
   //  std::cout << "age=" << GetAge() << std::endl;


}


二,public,protected,private用在派生类中。
      1,公有继承
                 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。
      2,保护继承
                保护继承的特点是基类的所有公有成员和保护成员都成为派生类的保护成员,并且只能被它的派生类成员函数或友元访问,基类的私有成员仍然是私有的。
      3,私有继承
           私有继承的特点是基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。  
      总结为一句话:派生类不能访问基类里的私有成员,只能访问公有成员和保护成员。
      使用最多的是公有继承。

class MmoPlayer: public Player {
public:
    MmoPlayer()
    {
        //派生类访问基类里的公有成员和函数
        id = 102;
        std::cout << "id=" << GetID() << std::endl;

        //派生类访问基类里的保护成员和函数
        sex = 1;
        std::cout << "sex=" << GetSex() << std::endl;

        //派生类不能访问基类里的用private修饰的变量和函数
       // age = 16;
       // std::cout << "age=" << GetAge() << std::endl;
    }
};

int main()
{
    
    MmoPlayer tom;
    //基类的公共成员在派生类中为公共成员,类对象可访问
    tom.id = 200;
    //基类的保护成员在派生类中为保护成员,类对象不可访问
   // tom.sex = 0;
   //基类的私有成员在派生类中为私有成员,类对象不可访问
   // tom.age = 20;
}

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ylf_fengge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值