условие
В тестирующей системе определен класс
class GetSecretInfo {
public:
std::string GetString() {
return "Тут что-то написано";
}
};
Напишите функцию
std::string SolverFunction(const GetSecretInfo& obj);
которая вызывает метод GetString у ее аргумента obj(этот метод возвращает некую строку), и
сама возвращает эту же строку. Сигнатура функции должна совпадать с указанной выше. В систему
нужен код самой функции
C/C++
Помогите написать программу С++
std::string SolverFunction(const GetSecretInfo& obj) {
return const_cast(&obj)->GetString();
}
std::string SolverFunction(const GetSecretInfo& obj)
{
//пояснение:
//у константных обьектов могут вызываться только константные методы
//но класс таких перегрузок не имеет.
//Делаем ссылку-дубликат обьекта и убираем у него константность
//оператором приведения типов const_cast
auto& abj = const_cast(obj);
//теперь с этого, уже не константного дубликата вызываем обычный метод.
return abj.GetString();
//ТАДА...
}
Да... и когда взломаете свой первый банкомат, не забудьте поделиться! Номер счета пришлю позже.
Дмитрий Сидоров
У меня имеется высшее юридическое образование и скоро я вам, ребята, понадоблюсь :)
#include
std::string SolverFunction(const GetSecretInfo& obj) {
return obj.GetString();
}
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() {
^~~~~~~~~
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;
}
#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;
}
Вот возможная реализация функции 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 с ним, чтобы продемонстрировать его использование.
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 с ним, чтобы продемонстрировать его использование.
Дмитрий Сидоров
Хотя бы код запустили, мастер, тогда бы, непременно, узнали, что из-за несоответствия квалификаторов константного объекта и его не константного метода, при попытке вызова, приведёт к ошибке компиляции. И существует три решения:
- Сделать метод класса константным, тем более, что он это заслуживает
std::string GetString()const {
return "Здесь что-то написано";
}
- Снять константность с параметра-ссылки вызывающего метода
std::string SolverFunction(const GetSecretInfo& obj) {
return const_cast(obj).GetString();
}
- То же, но через указатель
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() {
^~~~~~~~~
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() {
^~~~~~~~~
Похожие вопросы
- Помогите написать программу на С
- Помогите написать программу на C++
- Помогите написать программу на с++
- Помогите написать программу на с++
- Помогите написать программу
- Помогите написать программу на С++
- С++. Структуры(struct). Помогите написать программу
- Помогите написать программу на С++
- Пожалуйста, помогите написать программу на С++
- Помогите написать программу на СИ