C/C++

Помогите написать программу С++

условие
В тестирующей системе определен класс
class GetSecretInfo {
public:
std::string GetString() {
return "Тут что-то написано";
}
};
Напишите функцию
std::string SolverFunction(const GetSecretInfo& obj);
которая вызывает метод GetString у ее аргумента obj(этот метод возвращает некую строку), и
сама возвращает эту же строку. Сигнатура функции должна совпадать с указанной выше. В систему
нужен код самой функции
KK
Kon Kon
90
 std::string SolverFunction(const GetSecretInfo& obj) { 
return const_cast(&obj)->GetString();
}
Дмитрий Сидоров
Дмитрий Сидоров
92 037
Лучший ответ
 std::string SolverFunction(const GetSecretInfo& obj) 
{
//пояснение:
//у константных обьектов могут вызываться только константные методы
//но класс таких перегрузок не имеет.
//Делаем ссылку-дубликат обьекта и убираем у него константность
//оператором приведения типов const_cast
auto& abj = const_cast(obj);
//теперь с этого, уже не константного дубликата вызываем обычный метод.
return abj.GetString();
//ТАДА...
}
Да... и когда взломаете свой первый банкомат, не забудьте поделиться! Номер счета пришлю позже.
Галым Смаилов
Галым Смаилов
51 417
Дмитрий Сидоров У меня имеется высшее юридическое образование и скоро я вам, ребята, понадоблюсь :)
 #include  

std::string SolverFunction(const GetSecretInfo& obj) {
return obj.GetString();
}
Sergej Katschesow
Sergej Katschesow
25 860
Kon Kon ошибка
stdout:


stderr:
__temp__.cpp: In function ‘std::__cxx11::string SolverFunction(const GetSecretInfo&)’:
__temp__.cpp:22:26: error: passing ‘const GetSecretInfo’ as ‘this’ argument discards qualifiers [-fpermissive]
return obj.GetString();
^
__temp__.cpp:14:17: note: in call to ‘std::__cxx11::string GetSecretInfo::GetString()’
std::string GetString() {
^~~~~~~~~
#include <iostream>
#include <string>

class GetSecretInfo {
public:
std::string GetString() {
return "Тут что-то написано";
}
};

std::string SolverFunction(const GetSecretInfo& obj) {
return obj.GetString();
}

int main() {
GetSecretInfo secretInfo;
std::cout << SolverFunction(secretInfo) << std::endl;
return 0;
}
Anvar Sherov
Anvar Sherov
4 208
Вот возможная реализация функции SolverFunction:

cpp
#include <iostream>
#include <string>

class GetSecretInfo {
public:
std::string GetString() {
return "Здесь что-то написано";
}
};

std::string SolverFunction(const GetSecretInfo& obj) {
return obj.GetString();
}

int main() {
GetSecretInfo secretObj;
std::cout << SolverFunction(secretObj) << std::endl;
return 0;
}


В этой программе мы определяем класс GetSecretInfo с публичным методом GetString, который возвращает строку. Функция SolverFunction принимает объект типа GetSecretInfo в качестве аргумента и вызывает его метод GetString для получения строки. Наконец, функция возвращает эту же строку. В функции main мы создаем экземпляр GetSecretInfo и вызываем SolverFunction с ним, чтобы продемонстрировать его использование.
Дмитрий Сидоров Хотя бы код запустили, мастер, тогда бы, непременно, узнали, что из-за несоответствия квалификаторов константного объекта и его не константного метода, при попытке вызова, приведёт к ошибке компиляции. И существует три решения:
  1. Сделать метод класса константным, тем более, что он это заслуживает
 std::string GetString()const {
return "Здесь что-то написано";
}
  1. Снять константность с параметра-ссылки вызывающего метода
 std::string SolverFunction(const GetSecretInfo& obj) {
return const_cast(obj).GetString();
}
  1. То же, но через указатель
 std::string SolverFunction(const GetSecretInfo& obj) {
return const_cast(&obj)->GetString();
}
Конечно, вот код функции C++, которая выполняет указанные вами условия:
 std::string SolverFunction(const GetSecretInfo& obj) { 
return obj.GetString();
}
Эта функция принимает объект класса GetSecretInfo в качестве аргумента и возвращает строку, возвращаемую методом GetString. Сигнатура функции соответствует указанной вами сигнатуре.

Надеюсь, это то, что вы искали.
Kon Kon ошибка
stdout:


stderr:
__temp__.cpp: In function ‘std::__cxx11::string SolverFunction(const GetSecretInfo&)’:
__temp__.cpp:20:24: error: passing ‘const GetSecretInfo’ as ‘this’ argument discards qualifiers [-fpermissive]
return obj.GetString();
^
__temp__.cpp:14:17: note: in call to ‘std::__cxx11::string GetSecretInfo::GetString()’
std::string GetString() {
^~~~~~~~~