C++超详细知识点(二):类的访问权限(public、private、protected)

标题: 类的访问权限

1. 三种访问权限

  public:公有属性
  private: 私有属性
  protected: 保护属性

2. 权限访问规则

  public: 凡是在它下面声明的变量和函数,都可以在类的内部和外部访问。
  private: 凡是在它下面声明的变量和函数,只能在类的内部访问。可以使用公有成员函数,用于获取私有变量的值。
  protected: 凡是在它下面声明的变量和函数,只能在类的内部以及派生类(子类)中访问。

3. 成员属性

  在C++中,默认情况下,类的成员(包括属性和方法)的访问权限是私有(private)。如果你没有明确指定访问权限,那么类的成员将默认为私有

如:下面类中没有访问权限的设置,那么默认下面的成员都是私有成员。

// 定义一个动物的类
class Animal
{
    void EatFood() {  // 类的成员函数
        cout << "我要吃食物" << endl;
    }
    char *name; //类的数据成员 
    int number;
    char Test[100];
};

下面是手动添加有访问权限后的成员变量和函数。

// 定义一个动物的类
class Animal
{
	public:        //手动设置为公有属性,即实例化的对象可以直接访问
	    void EatFood() {  // 类的成员函数
	        cout << "我要吃食物" << endl;
	    }
	    char *name; //类的数据成员 
	private:
	    int number;
	protected:
	    char Test[100];
};

成员拥有访问权限属性后,必须要遵守权限访问规则!!

4. 为什么要设置私有属性呢?

  在C++中,将成员声明为私有(private)意味着它们只能在同一类的成员函数内部访问,而无法从类的外部直接访问。这提供了封装性,有助于隐藏实现的细节,其他人员只需要调用写好的接口实现功能,而不能查看代码中的细节,有利于保护一些重要的代码。私有成员的使用可以有效地防止外部代码直接操作或修改类的内部状态,从而提高代码的安全性和可维护性。

5. 公有属性、私有/保护属性使用区别

私有成员不能直接通过类的实例化对象访问!但是可以通过友元函数/类访问,或者通过内部的公有属性函数访问。

#include <iostream>
using namespace std;

// 定义一个动物的类
class Animal
{
	public:        //手动设置为公有属性,即实例化的对象可以直接访问
	    void EatFood() {  // 类的成员函数
	        cout << "我要吃食物" << endl;
	    }
	    char *name; //类的数据成员 
	private:
	    int number;
	protected:
	    char Test[100];
};

int main() {
    // 创建类的对象
    Animal Cat;
    Cat.EatFood();  //公有属性可以直接访问
   /*
     私有属性和保护属性不可以直接用对象访问
      Cat.number=2;
      Cat.Test="hhhh";
   */
    return 0;
}

6. 访问私有属性和保护属性

  私有属性和保护属性,只能内部访问,如通过类内部的成员函数进行访问。如: 公有成员函数,用于获取私有变量的值。
● student.h

//student.h
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include <iostream>
using namespace std;
class Student
{
    public:
        int GetAge();   //声明类的成员函数,在函数的其它地方实现
        int SetAge(int student_age); // 公有成员函数,用于获取私有变量的值
    private:
        int age;
        char name[32];
};
#endif

● student.cpp

#include "student.h"

int Student::SetAge(int student_age) //我们可以使用公有属性的函数接口,设置私有属性的值。
{
    age= student_age;
}
int Student::GetAge()   //获取私有属性的值。
{
    return age;      //返回私有属性成员
}

● main.cpp

#include "student.h"
int main(int argc, char const *argv[])
{
    Student qjl;
    qjl.SetAge(18);
    cout<<qjl.GetAge()<<endl;
    return 0;
}
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值