C++访问修饰符

本文介绍了C++中类成员的访问控制机制,包括public、private和protected三个关键字的使用方式及其作用范围。通过示例代码展示了不同访问级别的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。

关键字 public、private、protected 称为访问修饰符。

一个类可以有多个 public、protected 或 private 标记区域。

作用范围:从书写第一个访问修饰符到书写下一个访问修饰符止或遇到类主体结束花括号 };

注:成员和类的默认访问修饰符是 private。

例子:

#include <iostream>
using namespace std;

class A
{
private:
	int m_a1;
protected:
	int m_a2;
public:
	int m_a3;

	A()	//构造函数(初始化类中数据成员)
	{
		m_a1 = 1;
		m_a2 = 2;
		m_a3 = 3;
	}

};

int main()
{
	A a;
	//cout << a.m_a1 << endl; //错误m_a1为private数据
	//cout << a.m_a2 << endl; //错误m_a2为protected数据
	cout << a.m_a3 << endl;		//正确m_a3为公有数据

	system("pause");
	return 0;
}
输出:

最后总结一下

访问修饰符的三个关键字:
public、private、protected.
public
类外可见:类中函数、子类函数、该类的对象、其友元函数对其访问
private
仅有类内及其友元函数可访问
protected
类内、子类及友元函数可访问

成员和类的默认访问修饰符为private.

注:结构体默认为public

### C++ 访问修饰符使用教程 #### 1. 公有成员 (public) 公有成员可以在类的外部被直接访问。这意味着可以从对象实例直接读取或修改这些成员的数据。 ```cpp #include <iostream> using namespace std; class Box { public: double length; // 长度 }; int main() { Box box; box.length = 5.0; // 设置长度 cout << "Box length: " << box.length << endl; // 输出长度 } ``` 这段代码展示了如何声明一个具有公共属性`length` 的 `Box` 类,并通过创建该类的对象来设置和打印这个属性的值[^3]。 #### 2. 私有成员 (private) 私有成员仅限于在其所属类内部访问,即它们不能从类外直接操作。为了改变或查询私有数据成员的状态,通常需要提供特定的方法(也称为 getter 和 setter 方法)。 ```cpp #include <iostream> using namespace std; class Account { private: double balance; // 账户余额 public: void setBalance(double bal) { this->balance = bal; } double getBalance() const { return this->balance; } }; int main(){ Account acc; acc.setBalance(100); // 设定账户初始金额 cout << "Account Balance: $" << acc.getBalance(); } ``` 这里定义了一个名为 `Account` 的类,它有一个私有的浮点型变量 `balance` 来存储账户余额。由于它是私有的,所以必须借助公开接口 (`setBalance()` 和 `getBalance()`) 才能对其进行赋值或检索[^4]。 #### 3. 保护成员 (protected) 受保护的成员类似于私有成员,在其所在类内可见;但是不同于私有成员的是,派生自此类的新子类也可以看到并继承这些成员。然而,仍然不允许外界直接存取这类成员。 ```cpp #include <iostream> using namespace std; class BaseClass { protected: int value; public: BaseClass(int v):value(v){} virtual ~BaseClass(){} }; class DerivedClass : public BaseClass{ public: void showValue(){cout<<"The Value is "<<this->value<<endl;} }; int main(){ DerivedClass dObj(7); dObj.showValue(); // 显示基类中的受保护成员 } ``` 在这个例子中,`DerivedClass` 继承了来自 `BaseClass` 的受保护整数字段 `value` 并提供了展示此数值的功能方法 `showValue()` 。注意,尽管 `value` 是受保护级别的,但在衍生出来的子类里是可以正常使用的[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值