我如何公开声明方法并私下编写代码

时间:2018-11-15 02:38:02

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

我被赋予了此代码的约束,即无论如何我都不能编辑公众,并且不允许调用除指定库之外的任何其他库。

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映射到私有方法?这样一来,主要来说:方法调用的行为就像是在公共环境中一样,但在私有环境中(考虑到约束)

-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中。通常,我会通过创建这样的方法

在类内部创建方法
#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访问它们而无需更改在公共方法中的调用方式

1 个答案:

答案 0 :(得分:1)

成员函数始终可以访问所有成员(私有成员和公共成员),无论它是私有成员还是公共成员。因此,函数不能表现为“私有”或“公开”,而只是表现为“函数”。

仅私有/公共与从类之外访问该功能有关-一个可以(公共)或不能(私有)(此外,还受到保护,就像私有,除了用于继承类)。

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

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(!)
}