【问题标题】:How do i Declare methods in public and write the code in private [closed]我如何公开声明方法并私下编写代码[关闭]
【发布时间】:2019-04-18 02:15:21
【问题描述】:

我已获得此代码,但我无法以任何方式编辑公众,并且不允许调用除指定库之外的任何其他库。

Class example
{
private:
  vector<int> vector_1;
  void function_1(string name)
  {
  "code for function one goes here"
  }

public:
  void function_1(string name);
};

有没有办法将 function_1 映射到私有方法?所以在 main 中:方法调用的行为就像它是公开的,但它是私有的(考虑到约束)

-edit:我已经阅读了规则并进行了一些研究,但是找不到我正在寻找的真正答案。这是代码示例:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class MapFunction
{
 private:
 string responce;
 string input;
 vector<int> templist;

public:
 void AskForInput();
 void Output(string input)
 };



int main(void) {
  MapFunction a;
  return 0;
}

我的解决方案的限制是我不允许更改类的公共部分或将代码放入 main.xml 中。通常我会通过创建这样的方法在类内部创建方法

#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class MapFunction
{
private:
    string responce;
    string input;
    vector<int> templist;

public:
    void AskForInput(void);
    void Output(void);
};

void MapFunction::AskForInput() {
    cin >> input;
};
void MapFunction::Output() {
    cout << input;
};


int main(void) {
    MapFunction a;
    a.AskForInput();
    a.Output();
    return 0;
}

但是我想知道是否可以将方法放在私有内部并允许 main 访问它们而不改变它在公共中调用的方式

【问题讨论】:

  • 我投票决定将此问题作为题外话结束,因为要求家庭作业帮助的问题必须包括您迄今为止为解决问题所做的工作摘要,以及对困难的描述你正在解决它。

标签: c++ private-methods public-method


【解决方案1】:

成员函数总是可以访问所有成员(私有和公共成员),无论它是私有的还是公共的。所以一个函数不能表现为“in private”或“in public”,它只是表现为“function”。

Private/public only 与从类外部访问函数相关——可以(公共)或不能(私有)(此外,还有受保护的,这类似于私有,除了用于继承类)。

最后:还有friend 关键字:通过声明一个函数(或一个类)朋友,您可以让它访问该类的私有成员。此访问权限包括所有 成员,但是,您不能只授予特定成员访问权限(至少在没有代理类等技巧的情况下不能)。示例:

void outerFriend();
void outer();

class C
{
public:
    void publicInner();
private:
    friend void outerFriend();  
    void privateInner();
};

void outer()
{
    C c;
    c.publicInner(); // legal
    c.privateInner(); // not accessible!
}
void outerFriend()
{
    C c;
    c.publicInner(); // legal
    c.privateInner(); // legal(!)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    相关资源
    最近更新 更多