C++之 class 的三种访问修饰符( public、private、protected )

本文介绍了C++中类的公有(public)、私有(private)及受保护(protected)成员的定义与使用方法。通过实例展示了不同访问级别的成员如何被外部函数或派生类访问。

类的语法定义形式:

class B
{
    public:  //公有成员 

    private:  //私有成员

    protected:   //受保护成员

}:

公有(public)成员:在程序类的外部可以访问

#include<iostream>
using namespace std;
class area
{
	public:       //公有成员,外部可以访问 
		double breadth;
		double length;	
};

int main()
{
	area area1;
	area area2;
	double AREA;
	
	area1.breadth=3.45;   //通过.进行访问
	area1.length=3.1;
	
	area2.breadth=2.4;
	area2.length=5.0;
	
	AREA=area1.breadth*area1.length;
	cout << AREA <<endl;
	AREA=area2.breadth*area2.length;
	cout << AREA <<endl;
	
	return 0;
	
 } 

私有(private)成员:类的外部是不可访问的,只有类和友元函数可以访问私有成员

#include<iostream>
using namespace std;
class Box
{
	public:
		double length;
		void setwidth(double wid);
		double getwidth(void);
		
	private:
		double width;
 };
 //成员函数定义
 double Box::getwidth(void)	
 	{
	 return width;
}
 void Box::setwidth(double wid) 
 	{
	 width =wid;
}
 //程序的主函数
 int main() 
 {
 	Box box;
 	//不使用成员函数设置长度
	box.length=10.0;
	cout << "Length of box :" << box.length << endl;

	//不使用成员函数设置宽度
	//box.width=10.0;       //Error:因为width是私有的

	box.setwidth(10.0);    //使用成员函数设置宽度
	cout << "width of box :" << box.getwidth() << endl;
	return 0; 
 }

受保护(protected)成员:   保护成员在派生类(即子类)中是可访问的

#include<iostream>
using namespace std;

class Box
{
	protected:
		double width;
		
 } ;

class SmallBox:Box //smallBox 是派生类
 {
 	public:
 		void setSmallwidth(double wid);
 		double getSmallwidth(void);
 		
  };
  //子类的成员函数 
  double SmallBox::getSmallwidth(void)
  {
  	return width;
  }
  void SmallBox::setSmallwidth(double wid)
  {
  	width=wid;
  	
   } 
   //程序的主函数 
int main()
   {
   	SmallBox box;

   	//使用成员函数设置宽度

	box.setSmallwidth(5.0);

	cout << "width of box :" << box.getSmallwidth()  <<endl;

	return 0;
   }

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

C++中,publicprotectedprivate三种访问控制修饰符,用于控制类成员的访问权限,它们在类内部访问、类外部访问和子类访问时表现不同[^2]。 - **public(公共)**:被声明为public的成员在类内部、类外部和子类中都可以被访问。这意味着类的使用者可以直接访问这些成员,常用于定义类的接口,使得外部代码能够与类进行交互。例如: ```cpp #include <iostream> class MyClass { public: int publicVar; void publicFunction() { std::cout << "This is a public function." << std::endl; } }; int main() { MyClass obj; obj.publicVar = 10; obj.publicFunction(); return 0; } ``` - **private(私有)**:private成员只能在类的内部被访问,类的外部和子类都无法直接访问。这有助于隐藏类的实现细节,确保数据的安全性和完整性,防止外部代码意外修改类的内部状态。例如: ```cpp #include <iostream> class MyClass { private: int privateVar; void privateFunction() { std::cout << "This is a private function." << std::endl; } public: void accessPrivate() { privateVar = 20; privateFunction(); } }; int main() { MyClass obj; // obj.privateVar = 10; // 错误,无法直接访问私有成员 obj.accessPrivate(); return 0; } ``` - **protected(受保护)**:protected成员可以在类的内部和子类中被访问,但类的外部无法直接访问。这种访问控制介于publicprivate之间,常用于实现继承关系,允许子类访问基类的某些成员,同时对外部代码隐藏这些成员。例如: ```cpp #include <iostream> class Base { protected: int protectedVar; public: Base() : protectedVar(10) {} }; class Derived : public Base { public: void showProtected() { std::cout << "Protected Variable from Derived: " << protectedVar << std::endl; } }; int main() { Derived d; d.showProtected(); return 0; } ``` 此外,在继承关系中,不同的继承方式(publicprotectedprivate)也会影响基类成员在派生类中的访问权限: - public继承保持基类成员的访问权限不变。 - protected继承将基类的public成员变为protected。 - private继承将基类的publicprotected成员变为private [^3]。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值