目录
使用getter和setter方法来访问数据成员
语法
Example
示例
输出
从另一个函数内部访问成员函数
使用友元类
使用友元函数
结论
首页 后端开发 C++ C++程序访问类的私有成员

C++程序访问类的私有成员

Sep 08, 2023 am 08:17 AM
c 访问 私有成员

C++程序访问类的私有成员

类的私有成员只能被类的成员访问。这样做是为了保持面向对象的封装原则,确保数据及其相关函数被保存在一个单元中,并且只能从该类的成员访问。C++有三种不同的访问控制符来指定类的成员的可见性。这三种访问控制符是−

  • Public − 如果一个类的成员具有public可见性,那么这些成员可以从任何其他类中访问。

  • Private − 具有私有可见性的类成员只能从类内部访问。

  • Protected − protected class members can be accessed from with9in the class or from its subclasses only.

对于这篇文章,我们将仅关注访问类的私有成员。

使用getter和setter方法来访问数据成员

Getter和setter函数用于访问和修改类的私有成员。顾名思义,getter函数返回数据成员,而setter函数用于“设置”或修改数据成员。我们通过两个例子来进一步理解这个概念,但在此之前,给出基本语法如下。

语法

Getter/ Accessor functions −

private:
   <datatype> value;
public:
   <datatype> getterFunction() {
     return <datatype> this->value;
   }
登录后复制

Setter/Mutator函数−

private:
   <datatype> value;
public:
   void setterFunction(<datatype> _value) {
     this->value = _value;
   }
登录后复制

Example

的中文翻译为:

示例

#include <iostream>

using namespace std;

class Test{
   private:
      int value;
   public:
      //the getter function
      int getValue() {
         return this->value;
      }
      //the setter function
      void setValue(int _value) {
         this->value = _value;
      }
};

int main(){
   Test test;
   test.setValue(15);
   cout << "The value we set is: " << test.getValue() << endl;
   return 0;
}
登录后复制

输出

The value we set is: 15
登录后复制

从另一个函数内部访问成员函数

当我们访问一个私有成员函数时,情况是一样的。我们必须以与访问数据成员相同的方式从类成员方法内部访问它。我们可以使用“this”指针来避免名称冲突。

语法

private:
   <returntype> function_name(params) {};
public:
   <returntype> another_function(params) {
     <datatype> var = this->function_name(arguments);
   }
登录后复制

调用私有成员函数的函数应该声明为公共的。只有当从该类的对象调用公共函数时,该函数才会执行。

Example

的中文翻译为:

示例

#include <iostream>

using namespace std;

class Test{
   private:
      int value;
      //multiplies the member value by 10
      void multiplyValue() {
         this->value = this->value * 10;
      }
   public:
      //the getvalue function calls the multiply value function
      int multiplyAndGetValue() {
         this->multiplyValue();
         return this->value;
      }
      //the setter function
      void setValue(int _value) {
         this->value = _value;
      }
};

int main(){
   Test test;
   test.setValue(15);
   cout << "The value after setting and multiplying is: " << test.multiplyAndGetValue() << endl;
   return 0;
}
登录后复制

输出

The value after setting and multiplying is: 150
登录后复制

使用友元类

在C++中,友元类是一种可以访问其他类中不对其他类可见的私有和受保护成员的类。要将一个类声明为另一个类的友元类,需要使用关键字‘friend’。让我们看看它是如何工作的。

语法

class A{
   private:
     .....
   friend class B;
};

class B{
   //class body
};
登录后复制

Example

的中文翻译为:

示例

#include <iostream>

using namespace std;

class Test1{
   private:
      int value;
   public:
      Test1(int _value) {
         this->value = _value;
      }
      //we declare another class as a friend
      friend class Test2;
};

class Test2{
  public:
   //displays the value of the other class object
   void display(Test1 &t) {
      cout << "The value of Test1 object is: " << t.value;
   }
};

int main(){
   //creating two class objects of the two classes
   Test1 test1(15);
   Test2 test2;

   //calling the friend class function
   test2.display(test1);
   return 0;
}
登录后复制

输出

The value of Test1 object is: 15
登录后复制

使用友元函数

在C++中,友元函数类似于友元类。在这里,我们可以将一个不是类成员的特定函数声明为“友元”,并且它将获得访问类的私有成员的权限。让我们来看一下如何将一个函数定义为“友元”的语法。

语法

class A{
   private:
     .....
   friend <return_type> function_name(params);
};

<return_type> function_name(params) {
   //function body
}
登录后复制

Example

的中文翻译为:

示例

#include <iostream>

using namespace std;

class Test1{
   private:
      int value;
   public:
      Test1(int _value) {
         this->value = _value;
      }
      //we declare a friend function
      friend void display(Test1);
};

void display(Test1 t) {
   cout << "The value of Test1 object is: " << t.value;
}

int main(){
   //creating two class objects of the two classes
   Test1 test1(55);
   //calling the friend class function
   display(test1);
   return 0;
}
登录后复制

输出

The value of Test1 object is: 55
登录后复制

结论

当我们访问一个类的私有数据成员时,最好使用访问器/获取器和修改器/设置器函数。这是访问类的数据成员的最安全的方式。要始终记住的一件事是,访问私有成员的函数应该声明为公共的。友元函数在其他面向对象的语言中不可用,因为这并不总是保持面向对象封装的属性。友元关系是不对称的,如果类A声明类B为友元,那么类B将可以访问A的所有成员,但A将无法访问B的所有私有成员。

以上是C++程序访问类的私有成员的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C语言中的常量是什么,可以举一个例子吗? C语言中的常量是什么,可以举一个例子吗? Aug 28, 2023 pm 10:45 PM

常量也称为变量,一旦定义,其值在程序执行期间就不会改变。因此,我们可以将变量声明为引用固定值的常量。它也被称为文字。必须使用Const关键字来定义常量。语法C编程语言中使用的常量语法如下-consttypeVariableName;(or)consttype*VariableName;不同类型的常量在C编程语言中使用的不同类型的常量如下所示:整数常量-例如:1,0,34,4567浮点数常量-例如:0.0,156.89,23.456八进制和十六进制常量-例如:十六进制:0x2a,0xaa..八进制

iOS 17:如何控制哪些应用程序可以访问您的照片 iOS 17:如何控制哪些应用程序可以访问您的照片 Sep 13, 2023 pm 09:09 PM

在iOS17中,Apple可以更好地控制应用程序可以看到的照片内容。继续阅读,了解如何按应用管理应用访问权限。在iOS中,Apple的应用内照片选取器可让您与应用共享特定照片,而照片图库的其余部分则保持私密。应用必须请求访问您的整个照片图库,您可以选择授予应用以下访问权限:受限访问–应用程序只能看到您可以选择的图像,您可以随时在应用程序中或通过转到“设置”&gt;“隐私和安全”&gt;“照片”来查看所选图像。完全访问权限–App可以查看照片

VSCode和VS C++IntelliSense无法工作或拾取库 VSCode和VS C++IntelliSense无法工作或拾取库 Feb 29, 2024 pm 01:28 PM

VS代码和VisualStudioC++IntelliSense可能无法拾取库,尤其是在处理大型项目时。当我们将鼠标悬停在#Include&lt;wx/wx.h&gt;上时,我们看到了错误消息“CannotOpen源文件‘string.h’”(依赖于“wx/wx.h”),有时,自动完成功能无法响应。在这篇文章中,我们将看到如果VSCode和VSC++IntelliSense不能工作或不能提取库,你可以做些什么。为什么我的智能感知不能在C++中工作?处理大文件时,IntelliSense有时

如何在Java中访问JsonNode的JSON字段、数组和嵌套对象? 如何在Java中访问JsonNode的JSON字段、数组和嵌套对象? Aug 30, 2023 pm 11:05 PM

一个JsonNode是Jackson的JSON树模型,它可以将JSON读取为JsonNode实例,并将JsonNode写入JSON。通过创建ObjectMapper实例并调用readValue()方法,我们可以使用Jackson将JSON读取为JsonNode。我们可以使用JsonNode类的get()方法访问字段、数组或嵌套对象。我们可以使用asText()方法返回有效的字符串表示,并使用JsonNode类的asInt()方法将节点的值转换为Javaint。在下面的示例中,我们可以访问Json

使用Python访问各种音频和视频文件的元数据 使用Python访问各种音频和视频文件的元数据 Sep 05, 2023 am 11:41 AM

我们可以使用Mutagen和Python中的eyeD3模块访问音频文件的元数据。对于视频元数据,我们可以使用电影和Python中的OpenCV库。元数据是提供有关其他数据(例如音频和视频数据)的信息的数据。音频和视频文件的元数据包括文件格式、文件分辨率、文件大小、持续时间、比特率等。通过访问这些元数据,我们可以更有效地管理媒体并分析元数据以获得一些有用的信息。在本文中,我们将了解Python提供的一些用于访问音频和视频文件元数据的库或模块。访问音频元数据一些用于访问音频文件元数据的库是-使用诱变

修复Xbox错误代码8C230002 修复Xbox错误代码8C230002 Feb 27, 2024 pm 03:55 PM

您是否由于错误代码8C230002而无法在Xbox上购买或观看内容?一些用户在尝试购买或在其控制台上观看内容时不断收到此错误。抱歉,Xbox服务出现问题。稍后再试.有关此问题的帮助,请访问www.xbox.com/errorhelp。状态代码:8C230002这种错误代码通常是由于暂时的服务器或网络问题引起的。但是,还有可能是由于帐户的隐私设置或家长控制等其他原因,这些可能会阻止您购买或观看特定内容。修复Xbox错误代码8C230002如果您尝试在Xbox控制台上观看或购买内容时收到错误代码8C

递归程序在C++中找到数组的最小和最大元素 递归程序在C++中找到数组的最小和最大元素 Aug 31, 2023 pm 07:37 PM

我们以整数数组Arr[]作为输入。目标是使用递归方法在数组中找到最大和最小的元素。由于我们使用递归,我们将遍历整个数组,直到达到长度=1,然后返回A[0],这形成了基本情况。否则,将当前元素与当前最小或最大值进行比较,并通过递归更新其值以供后续元素使用。让我们看看这个的各种输入输出场景−输入 −Arr={12,67,99,76,32};输出 −数组中的最大值:99解释 &mi

解决Tomcat部署war包后无法访问的问题的方法 解决Tomcat部署war包后无法访问的问题的方法 Jan 13, 2024 pm 12:07 PM

如何解决Tomcat部署war包后无法成功访问的困扰,需要具体代码示例Tomcat作为一个广泛使用的JavaWeb服务器,允许开发人员将自己开发的Web应用打包为war文件进行部署。然而,有时候我们可能会遇到部署war包后无法成功访问的问题,这可能是由于配置不正确或其他原因引起的。在本文中,我们将提供一些解决这个困扰的具体代码示例。一、检查Tomcat服务

See all articles