С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
#1

Функции. - C++

05.10.2011, 00:45. Просмотров 376. Ответов 6
Метки нет (Все метки)

Подскажите, пожалуйста.
Задание:
В результате вызова функции mangle("Rad vas videt") возвращает символ R или указатель на строку "Dobro pogalovat", в зависимости от того, присваиваете ли вы возвращаемое значение переменной типа char или переменной типа char*;
0
Миниатюры
Функции.  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2011, 00:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функции. (C++):

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции - C++
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть значение, отталкиваясь от первой. Возможно...

Вычислить m значений функции f(x) на отрезке [a, b]. Вычисление величины f(x) оформить в виде функции - C++
Составить программу решения поставленной задачи: Вычислить m значений функции f(x) на отрезке . Вычисление величины f(x) оформить в виде...

А почему ошибка, что функции print и read не определены в функции main()? - C++
Что-то не понимаю. Они определены в заголовочном файле. А подчеркивается красным что нет.... #include <iostream> #include...

Вычислить где значение функции меняет знак(отделение корней функции) - C++
Имеется следующая функция f(x)=sqrt(4*x+7)-3*cos(x) Нужно написать программу, где будет выводится таблица, где будет видно при каком...

Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции - C++
Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции. f=arctgx+ln^2 x^2 Нужно...

Различные функции, для которых можно создать массив указателей на функции - C++
Придумайте не менее 3-х различных функций, для которых можно создать массив указателей на функции.

6
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
05.10.2011, 08:01 #2
С помощью шаблонов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <iostream>
 
template <class T>
T mangle(const char*);
 
template <>
char mangle<char>(const char*);
 
template <>
const char* mangle<const char*>(const char*);
 
int main()
{
    char c = mangle<char>("Nice to meet you!");
    const char* str = mangle<const char*>("Nice to meet you!");
 
    std::cout << "As char: " << c << std::endl
          << "As const char*: " << str << std::endl;
    
    return 0;
}
 
template <>
char mangle<char>(const char*)
{
    return 'R';
}
 
template <>
const char* mangle<const char*>(const char*)
{
    static const char* str = "You're welcome";
    return str;
}
Через неявное приведение типов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <iostream>
 
class char_or_string
{
public:
    operator char() const;
    operator const char*() const;
};
 
char_or_string mangle(const char*);
 
int main()
{
    char c = mangle("Nice to meet you!");
    const char* str = mangle("Nice to meet you!");
 
    std::cout << "As char: " << c << std::endl
          << "As const char*: " << str << std::endl;
    
    return 0;
}
 
char_or_string::operator char() const
{
    return (char) 'R';
}
 
char_or_string::operator const char*() const
{
    static const char* str = "You're welcome";
    return str;
}
 
char_or_string mangle(const char*)
{
    return char_or_string();
}
2
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.10.2011, 11:39 #3
Но по хорошему, следовало бы доказать преподу, что он нуб, раз даёт такое задание.
Тип возвращаемого значения не участвует в перегрузке.
Первый вариант с шаблоном эквивалентен использованию двух функций с разными именами, т.е. это не перегрузка.
Второй вариант не соответствует заданию, т.к. возвращает объект вместо символа или строки.
В общем, это кривое задание, придуманное человеком, который ни черта не знает С++, т.е. среднестатистическим преподавателем.(
1
Nameless One
Эксперт С++
5777 / 3427 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
05.10.2011, 11:43 #4
А по другому и не сделаешь, статическая типизация ведь А задание да, ни о чем
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.10.2011, 11:48 #5
Возможно, это вариант с подковыркой. И нужно доказать преподу не реализуемость задачи в такой постановке.
Иначе, препод лопух и аппаратуры при нём нету.
0
KeyGen
384 / 291 / 6
Регистрация: 07.08.2011
Сообщений: 790
Записей в блоге: 1
05.10.2011, 19:00  [ТС] #6
Цитата Сообщение от Deviaphan Посмотреть сообщение
Но по хорошему, следовало бы доказать преподу, что он нуб, раз даёт такое задание.
Тип возвращаемого значения не участвует в перегрузке.
Первый вариант с шаблоном эквивалентен использованию двух функций с разными именами, т.е. это не перегрузка.
Второй вариант не соответствует заданию, т.к. возвращает объект вместо символа или строки.
В общем, это кривое задание, придуманное человеком, который ни черта не знает С++, т.е. среднестатистическим преподавателем.(
Не преподу а писателю):
Прата С. - Язык программирования С++. Лекции и упражнения (5-е изд.) - 2007

Добавлено через 3 минуты
Вот так я сделал задание:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
using namespace std;
 
template <class K>
K mangle(char*);
 
template <>
char mangle<char>(char*);
 
template <>
char* mangle<char*>(char*);
    
int main()
{
    setlocale(LC_ALL, "rus");
    
    char * c="Rad vas videt";
    char * b;
    char bb;
    
    bb=mangle<char>(c);
    b=mangle<char*>(c);
    
    cout << bb << endl;
    cout << b << endl;
    
    
    cout << "\n\n\n";
    system("PAUSE");
    return 0;
}
 
template <>
char mangle<char>(char* a){
     
     return a[0];
     }
 
template <>
char* mangle<char*>(char*){
      char * str="Dobro pagalovat";
     return str;
     }
Подскажите я не уверен что так можно: return a[0];
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
05.10.2011, 19:17 #7
Цитата Сообщение от KeyGen Посмотреть сообщение
Не преподу а писателю)
Если это задание не в главе шаблонов, то следует признать, что и Прат нубит.)
Как вариант, не точность перевода.
0
05.10.2011, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2011, 19:17
Привет! Вот еще темы с ответами:

Найти среднее арифметическое значений функции f(x) в точках a, b, (a+b)/2 используя обращение к функции - C++
А этой нету: 3.Найти среднее арифметическое значений функции f(x) в точках a, b, (a+b)/2 используя обращение к функции f=(x*sin⁡ π/4) /...

Вызов функции внутри другой функции с передачей локальной переменной по ссылке - C++
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using std::cout; void f(const int &amp;ref){...

Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций - C++
Добрый день. Дана лабораторная работа, (см. ниже 2 скриншота) по заданию нужно вычислить функции с использованием их разложения в степенной...

Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции - C++
здраствуйте знатаки!! помогите пожалуйсто решить задачу.Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.