【问题标题】:How to access private class members with out being in the in class [duplicate]如何在不参加课堂的情况下访问私人班级成员[重复]
【发布时间】:2021-10-11 20:19:46
【问题描述】:

我想更改私有成员中的数据,但 delete_Data() 函数在类之外,因此如何获取成员而不在类中声明并使用 delete_Data() 函数擦除它们
唯一的方法它对我有用,它可以在公共部分的类中声明 delete_data() 函数,但是
我们的老师说你应该只使用这种方法
我需要帮助,谢谢 例如

输入您的姓名:约翰
输入您的 ID:1234

姓名:约翰
ID:1234

姓名:
ID:0

#include <iostream>
#include <string.h>
using namespace std;
class data{
  private:
     string name;
     int id;
  public:
     void add_Data()
{
     cout<<"Enter you Name :";
     cin>>name;
     cout<<"Enter your id :";
     cin>>id;
}
    void display_Data(){
     cout<<"Name :"<<name<<endl;
     cout<<"ID :"<<id<<endl;
}
};

void delete_Data(){
     name="";
     id=0;
}
  int main(){
    data one;
    one.add_Data();
    one.display_Data();
    delete_Data()
    one.display_Data;
 return 0;
}

【问题讨论】:

  • 您可以将delete_Data 声明为友元函数,但我不明白为什么您不会在类中删除数据。 nameid 在课堂之外也没有意义。您应该拥有delete_Data(data&amp;)delete_Data(data*)
  • 你为什么不问问你的老师?这不是他们的工作吗?在互联网上让随机的人猜测你的老师想要什么似乎是个坏主意。
  • 这是一个很常见的面试问题:不仅在 C++ 中,在 C# 中也是如此。 geeksforgeeks.org/…中有一些答案
  • 我试过了,但我没有得到解决方案,这就是为什么我在 Stackoverflow 中询问唯一对我有用的方法是在公共类中声明删除函数
  • @cup 在示例中使用#include &lt;bits/stdc++.h&gt; 的网站不应被信任提供好的建议。

标签: c++


【解决方案1】:

通常,类的成员函数和friends可以通过类的实例访问类的私有成员。 p>

因此,在您的情况下,将 delete_Data 函数设为 friend 函数。

class data 
{
private:
    std::string name;
    int id;
public:
    // ...
    friend void delete_Data(data& obj);
};

void delete_Data(data& obj)
{
    obj.name = "";
    obj.id = 0;
}

现在在main()

data one;
delete_Data(one);

另外请注意,您需要传递data 类的实例才能访问该类的成员。


旁注

【讨论】:

  • "只有类的成员函数和friends 才能访问类的私有成员。" - 实际上,这不是真的。还有另一种方式,使用一些template trickery
  • 另一种简单的方法是只使用指针和偏移量。
猜你喜欢
  • 2015-07-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-24
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 2016-10-26
  • 2023-04-06
相关资源
最近更新 更多