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

小仇学长 2024-06-24 13:05:12 阅读 66

目录

标题: 类的访问权限1. 三种访问权限2. 权限访问规则3. 成员属性4. 为什么要设置私有属性呢?5. 公有属性、私有/保护属性使用区别6. 访问私有属性和保护属性

标题: 类的访问权限

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



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。