Мне дали этот код с ограничениями, которые я не могу редактировать в любом случае, и мне не разрешается вызывать любые другие библиотеки, кроме указанных.
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 с методом private? так что в основном: вызов метода будет действовать так, как если бы он был публичным, но закрытым (с учетом ограничений)
-редактировать: я прочитал правила и немного изучить, но не смог найти правильный ответ на то, что я искал. Вот пример кода:
#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;
}
однако мне интересно, можно ли было разместить методы внутри private и позволить main получить к ним доступ без изменения способа их вызова в public
Функция-член всегда имеет доступ ко всем членам (частным и общедоступным), независимо от того, является ли он частным или публичным. Таким образом, функция не может вести себя как «конфиденциально» или «публично», она просто ведет себя как «функция».
Только частное / общедоступное имеет отношение к доступу к функции из вне класс — либо можно (общедоступный), либо нельзя (частный) (и, кроме того, он еще защищен, что похоже на частный, за исключением наследования классов).
Наконец-то: 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(!)
}
Других решений пока нет …