Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Lers
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
#1

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

23.01.2014, 19:42. Просмотров 338. Ответов 6
Метки нет (Все метки)

Вопрос такой, почему в методе 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());
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2014, 19:42
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Почему в setnamedisc нужно использовать char * для установки значения, а при возвращении значения тип метода должен быть char* ? (C++):

array char* to char* (значения массива указателей в один указатель)
Как сложить(или вывести в формате char*) все значения массива указателей(char...

Почему не выдает значения char с таблицы?
Почему не выдает значения char с таблицы? #include <iostream> #include...

8-битовый тип signed char может представлять значения от -128 до 127
8-битовый тип signed char может представлять значения от -128 до 127 Кто...

char char* string и константные значения
Робот может перемещаться в 4 направлениях c-Север, u- Юг, z- Запад, v- Восток...

Типы данных - где нужно использовать char, а где unsigned char?
Всем привет! У меня вопрос, искал ответ на него, но безуспешно. Вопрос...

Ошибка при проверке значения char
Выдает ошибку, что m не определена, в If. Если добавить int m, то компилит, но...

6
Arkaniy
106 / 106 / 21
Регистрация: 29.08.2012
Сообщений: 453
23.01.2014, 19:47 #2
char* - это указатель на строку. Используется для передачи\возврата строки. Вместо этого можно использовать string из string.h.
1
monolit
188 / 187 / 46
Регистрация: 24.03.2011
Сообщений: 670
Завершенные тесты: 1
23.01.2014, 19:50 #3
А что значит обычными переменными?) Не указателями, имеешь ввиду? Если да, то наверное потому, что время это все таки число, а имя - строка, а char* как раз можно как строку интерпретировать) И нюансами это назвать трудно - дело в понимании того, что делаешь.
1
Lers
13 / 13 / 6
Регистрация: 27.05.2012
Сообщений: 208
23.01.2014, 19:54  [ТС] #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* как раз можно как строку интерпретировать) И нюансами это назвать трудно - дело в понимании того, что делаешь.
Я понимаю, просто когда буду сдавать лабу, преподы очень придирчивы именно к словам, даже если видят что это я понимаю, но не могу сразу объяснить "как по учебнику". Поэтому спрашиваю у вас, поэтому все переварю и отвечу))
0
Arkaniy
106 / 106 / 21
Регистрация: 29.08.2012
Сообщений: 453
23.01.2014, 20:10 #5
Lers, в первом случае функция принимает строку, по-этому и char*.
Во втором строка возвращается. Можно заменить на string, но тогда нужно будет всё менять.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8022 / 4865 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
23.01.2014, 20:53 #6
Цитата Сообщение от Arkaniy Посмотреть сообщение
string из string.h.
string находится в хедере string.
string.h - сишный хедер, который содержит функции для работы со строками (strlen, strcat, etc)
1
Arkaniy
106 / 106 / 21
Регистрация: 29.08.2012
Сообщений: 453
23.01.2014, 21:01 #7
MrGluck, спасибо за поправку, не знал этого.
0
23.01.2014, 21:01
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2014, 21:01
Привет! Вот еще темы с решениями:

Ошибка: "const char[78]" нельзя использовать для инициализации сущности типа char[12]
class Goroskop { private: char name_Zodiak; public: char name_Zodiak =...

Напишите программу, присваивающую значения элементов списка указателей на символьные строки в стиле С (тип char* ) элементам вектора строк
Напишите программу, присваивающую значения элементов списка указателей на...

Ошибка при присваивании массиву char значения
В общем, требуется присвоить массиву чаров одно из нескольких значений (в...

Минимальные и максимальные значения для типов: char ....
Каковы на вашей машине минимальные и максимальные значения для следующих...


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

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

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