Форум программистов, компьютерный форум CyberForum.ru

Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? - C++

Восстановить пароль Регистрация
 
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 202
23.01.2014, 19:42     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #1
Вопрос такой, почему в методе setnamedisc нужно использовать char *s для установки значения, а при возвращении значения в методе getnamedisc() тип метода должен быть char*. а в методах sethours и gethours можно обойтись обычными переменными? Хочу просто знать эти нюансы)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void Disc :: setnamedisc(char *s)
{
  strcpy(namedisc,s);
}
 
char* Disc :: getnamedisc()
{
  return namedisc;
}
 
void Disc :: sethours(int h)
{
  hours=h;
}
 
int Disc :: gethours()
{
  return hours;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Disc
{
  private:
    char namedisc[20]; //название дисциплины
    int hours;         //количество часов
 
  public:
    void setnamedisc (char s[20]);   //установить название дисциплины
    char* getnamedisc();          //получить название дисциплины
    void sethours (int h);        //установить кол-во часов
    int gethours();               //получить кол-во часов
    void vvod();             //заполнить объект
    void vivod();             //вывести объект
};
C++
1
2
3
4
5
6
7
a.setnamedisc("Математика");
  char *s1;
  s1=a.getnamedisc();
  printf("Название дисциплины: %s",s1);
 
  a.sethours(20);
  printf("\nКоличество часов: %d\n",a.gethours());
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 19:42     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Посмотрите здесь:

-1.#IND при возвращении значения функции C++
C++ char char* string и константные значения
C++ Минимальные и максимальные значения для типов: char ....
Напишите программу, присваивающую значения элементов списка указателей на символьные строки в стиле С (тип char* ) элементам вектора строк C++
C++ 8-битовый тип signed char может представлять значения от -128 до 127
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
23.01.2014, 19:47     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #2
char* - это указатель на строку. Используется для передачи\возврата строки. Вместо этого можно использовать string из string.h.
monolit
179 / 179 / 21
Регистрация: 24.03.2011
Сообщений: 641
Завершенные тесты: 1
23.01.2014, 19:50     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #3
А что значит обычными переменными?) Не указателями, имеешь ввиду? Если да, то наверное потому, что время это все таки число, а имя - строка, а char* как раз можно как строку интерпретировать) И нюансами это назвать трудно - дело в понимании того, что делаешь.
Lers
12 / 12 / 3
Регистрация: 27.05.2012
Сообщений: 202
23.01.2014, 19:54  [ТС]     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #4
Цитата Сообщение от Arkaniy Посмотреть сообщение
char* - это указатель на строку. Используется для передачи\возврата строки. Вместо этого можно использовать string из string.h.
Это да, я знаю. Вопрос, почему? Почему обязательно char *s.
почему
C++
1
2
3
4
void Disc :: setnamedisc(char *s)
{
  strcpy(namedisc,s);
}
C++
1
2
3
4
char* Disc :: getnamedisc()
{
  return namedisc;
}
И почему обязательно char* Disc.
Char* обязательна потому что возвращаю адрес строки(можно ли написать string Disc ?)
а в первом методе char *s, потому что я копирую строку, а не 1 символ, поэтому использую указатель?

Добавлено через 1 минуту
Цитата Сообщение от monolit Посмотреть сообщение
А что значит обычными переменными?) Не указателями, имеешь ввиду? Если да, то наверное потому, что время это все таки число, а имя - строка, а char* как раз можно как строку интерпретировать) И нюансами это назвать трудно - дело в понимании того, что делаешь.
Я понимаю, просто когда буду сдавать лабу, преподы очень придирчивы именно к словам, даже если видят что это я понимаю, но не могу сразу объяснить "как по учебнику". Поэтому спрашиваю у вас, поэтому все переварю и отвечу))
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
23.01.2014, 20:10     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #5
Lers, в первом случае функция принимает строку, по-этому и char*.
Во втором строка возвращается. Можно заменить на string, но тогда нужно будет всё менять.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4919 / 2662 / 243
Регистрация: 29.11.2010
Сообщений: 7,399
23.01.2014, 20:53     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #6
Цитата Сообщение от Arkaniy Посмотреть сообщение
string из string.h.
string находится в хедере string.
string.h - сишный хедер, который содержит функции для работы со строками (strlen, strcat, etc)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 21:01     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Еще ссылки по теме:

Ошибка при присваивании массиву char значения C++
C++ Std::fstream почему функция write принимает параметр char* а не unsigned char* (аля byte*) ?
Почему не выдает значения char с таблицы? C++

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

Или воспользуйтесь поиском по форуму:
Arkaniy
 Аватар для Arkaniy
106 / 106 / 6
Регистрация: 29.08.2012
Сообщений: 452
23.01.2014, 21:01     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? #7
MrGluck, спасибо за поправку, не знал этого.
Yandex
Объявления
23.01.2014, 21:01     Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ?
Ответ Создать тему
Опции темы

Текущее время: 05:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru