• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C++中访问权限的示例详解

c++ 搞代码 4年前 (2022-01-06) 29次浏览 已收录 0个评论

C++通过 public、protected、private 三个关键字来控制成员变量和成员函数的访问权限(也称为可见性),下面这篇文章主要给大家介绍了关于C++中访问权限的相关资料,需要的朋友可以参考下

众所周知,C++面向对象的三大特性为:封装,继承和多态。下面我们就先对封装做一些简单的了解。封装是通过C++中的类来完成的,类是一种将抽象转换为用户定义类型的工具。类的定义如下:

 class circle { public: //成员变量 int  m_L; int  m_H; public: //成员函数(方法) double get_Square() { return m_L*m_H; } } 

在上面的代码中,我们定义了一个 “circle” 类,主要包含三个部分:成员变量,成员方法和访问控制(public, protect, private)。

  1. public:公共权限,类内可以访问,类外可以访问
  2. protected:保护权限,类内可以访问,类外不可以访问,继承的子类可以访问
  3. private:私有权限,类内可以访问, 类外不可以访问,继承的子类不可以访问

下面我们的对这三点进行测试,以加深印象:

 class circle { public: int  public_L; int  public_H; private: int  private_L; int  private_H; protected: int protect_L; int protect_H; public: //成员函数(方法) circle() //通过构造函数对成员变量进行赋值 { public_L = 20, public_H = 30; private_L = 40, private_H = 50; protect_L = 60, protect_L = 70; } double get_Square() { return private_L*private_H; } }; 

在定义的 “circle” 类中,由于变量 public_L,public_H 和 get_Square 都是公有权限,因此在类内类外均可访问,下面这两种写法均正确:

 circle C1; //实例化类对象 double S_1 = C1.get_Square(); double S_2 = C1.public_H * C1.public_L; 

但是,由于变量 private_L,private_H 均为私有权限, 因此在类内可以访问,即 get_Square() 能够访问,在类外下面的写法是错误的:

 int S_3 = C1.private_H * C1.private_L; //Error:成员变量不可访问 

同理,对于保护权限的变量,类内可以访问,类外不可访问:

 int S_3 = C1.private_H * C1.private_L; //Error:成员变量不可访问 

同样,继承的方式也有 public, protect, private 三种:

  • public:公共继承,保持父类中成员的访问权限,继承到子类
  • protected:保护继承,除私有权限外,父类中所有的成员都以保护权限的方式继承到子类
  • private:私有继承,父类中所有的成员都以私有权限的方式继承到子类。

下面看一个例子:

 class son1:public circle{ }; // 公有继承,保持 circle 父类中的访问权限不变 class son2:protected circle{ }; // 保护继承,除去 circle 父类中私有权限,其余成员你的的访问权限全部为保护权限 class son3:private circle{ }; // 私有继承,父类中所有成员的访问权限全部为私有权限 

那么通过上述分析,

  • son1 的访问权限与父类一致;
  • son2 只能在类内访问父类中的成员,但是他的子类中也可以通过public或者protected继承的方式访问到父类 “circle” 中的成员
  • son3 只能以私有的方式来继承父类中的成员

所以:

 son1 s1; s1.get_Square(); //访问public权限,正确 son2 s2; s2.get_Square(); //Error:成员变量不可访问,protected权限 son3 s3; s3.get_Square(); //Error:成员变量不可访问,private权限 

C++中,类既可以用class 定义,也可以用struct定义。struct与class唯一的区别就在于默认访问权限不同struct默认为公共访问权限,Class默认为私有访问权限。举个例子:

 class a { int m_a; //class 定义,未声明访问权限默认为private }; struct b { int m_b; //struct 定义,未声明访问权限默认为public }; 

于是:

 a c_a; c_a.m_a = 20; // Error: 成员变量不可访问 b s_b; s_b.m_b = 20; // 正确,访问public类型变量 

C++中类的成员的权限总结:

来源gaodai^.ma#com搞#代!码网

private:只能由该类的成员函数,友元函数访问,不能被该类的对象访问。

protected:除了private外还能被子类的函数访问,同样不能被该类的对象访问。

public:除了protected外,还能被该类的对象访问。

  private protected public
类的函数和友元函数
子类的函数 ×
类的对象 × ×

​继承后的可访问性:
private继承后,父类中的所有方法在子类中变成private。

protected继承后,父类>=protected的所有方法(protected,public)在子类中变成protected。

public继承后,父类方法的属性不变。

总结

以上就是C++中访问权限的示例详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C++中访问权限的示例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址