C++中的访问权限控制用于指定类内成员(包括数据成员和成员函数)的访问范围。这是面向对象编程中封装性的一个重要方面,允许设计者定义哪些类的信息对外界可见,哪些应当保持私密。C++提供了三种基本的访问权限:private
、protected
和public
。
1. private
(私有)
私有成员只能被其所在类的函数访问。这意味着,从类的外部是无法直接访问这些成员的。在类定义中未指定访问权限的成员,默认为private
。比如:
class MyClass {
private:
int privateVar; // 私有变量
public:
void setVar(int v) {
privateVar = v;
}
int getVar() {
return privateVar;
}
};
2. protected
(受保护)
受保护的成员在类内部和该类的派生类中都是可访问的,但不能通过类的对象来直接访问。这对于类的继承尤为重要,因为派生类可以访问基类中的受保护成员,而外部代码则不能。
class Base {
protected:
int protectedVar; // 受保护的变量
};
class Derived : public Base {
public:
void setVar(int v) {
protectedVar = v; // 可以直接访问受保护的基类成员
}
};
3. public
(公有)
公有成员可以在任何地方被访问,包括类外部。通常,构造函数和部分成员函数(特别是用于访问私有和受保护数据的函数)被定义为公有的。
class MyClass {
public:
int publicVar; // 公有变量
};
访问权限的重要性
- 封装: 通过将内部实现细节(如类的私有成员)隐藏起来,封装保证了对象的完整性,减少了外部对对象状态的直接操作,从而降低了对象状态被意外或恶意修改的风险。
- 继承与多态:
protected
访问权限在继承中尤为重要,它允许派生类访问基类的成员,同时又不将这些成员暴露给外部使用,有助于实现多态性。
正确使用访问权限可以帮助程序员提高代码的安全性、灵活性和可维护性。
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
/*
1.public 公共权限:成员 类内可以访问,类外可以访问
2.protected 保护权限:成员 类内可以访问,类外不可以访问--------子 可以访问 父 的保护类
3.private 私有权限: 成员 类内可以访问,类外不可以访问
*/
//class 和 struct 区别在于默认的权限。class默认为私有,struct默认为公共
class Stu{
public:
string name;
protected:
int age;
private:
int id;
public:
void show()
{
name = "嘻嘻";
age = 19;
id = 123456;
}
};
int main()
{
Stu s1;
//s1.age = 18;
s1.name = "ahha";
//s1.id = 156;
s1.show();
return 0;
}