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

Вывод текста посредством элемент-функций класса - C++

Восстановить пароль Регистрация
 
No1imit
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 65
19.07.2015, 12:23     Вывод текста посредством элемент-функций класса #1
Не могу понять, почему в одном случае текст выводится, а в другом нет. Есть определение элемент-функций:
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
// конструктор инициализирует courseName переданной строкой
    GradeBook::GradeBook(string name)
    {
        setCourseName(name); // инициализировать вызовом set-функции
    } // конец конструктора GradeBook
 
    // функция, устанавливающая название курса
    // гарантирует, что название курса содержит не более 25 символов
    void GradeBook::setCourseName(string name)
    {
        if (name.length() <= 25) // если не более 25 символов
            courseName = name; // сохранить название курса в объекте
 
        if (name.length() > 25) // если в названии больше 25 символов
        {
            // записать в courseName первые 25 символов параметра name
            courseName = name.substr(0, 25); // начать с 0, длина 25
 
            cout << "Name \"" << name << "\" exceeds maximum length.\n"
                << "Limiting courseName to first 25 characters.\n" << endl;
        }
    }
 
    // функция, получающая название курса
    string GradeBook::getCourseName()
    {
        return courseName; // возвратить courseName объекта
    } // конец функции getCourseName
 
    // функция, выводящая сообщение-приветствие
    void GradeBook::displayMessage()
    {
        cout << "Welcome to the Grade Book for\n" << getCourseName() << "!" << endl;
    }
Функция main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int main()
{
    // создать два объекта GradeBook
    // исходное имя курса для gradeBook1 слишком длинное
    GradeBook gradeBook1("CS101 Introduction to Programming in C++");
    GradeBook gradeBook2("CS102 Data Structures");
 
    // вывести courseName каждого GradeBook
    cout << "gradeBook1's initial course name is: " << gradeBook1.getCourseName()
        << "\ngradeBook2's initial course name is: " << gradeBook2.getCourseName() << endl;
 
    // модифицировать courseName for gradeBook1 (корректной строкой)
    gradeBook1.setCourseName("CS101 C++ Programming");
 
    // вывести courseName каждого GradeBook
    cout << "\ngradeBook1's course name is: " << gradeBook1.getCourseName()
        << "\ngradeBook2's course name is: " << gradeBook2.getCourseName() << endl;
    
    system("pause");
}
Не могу понять, к примеру, чтобы вывести "Welcome to the GradeBook for .." нужно вызвать эту элемент функцию:
C++
1
gradeBook1.displayMessage();
Но это почему выводится?
C++
1
2
cout << "Name \"" << name << "\" exceeds maximum length.\n"
                << "Limiting courseName to first 25 characters.\n" << endl;
Условие выполнено, но почему сразу в начале программы идет вывод этого текста?
Я чуть-чуть потерялся походу в этом всём
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2015, 12:23     Вывод текста посредством элемент-функций класса
Посмотрите здесь:

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. C++
C++ как сделать вывод текста, результата и продолжение текста
C++ Вызов функций класса Dictionary функциями дружественного класса
C++ Вызов функций дружественного класса
Отличия методов класса от обычных функций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
19.07.2015, 12:27     Вывод текста посредством элемент-функций класса #2
No1imit, потому что в конструкторе GradeBook::GradeBook(string name) вызывается функция void GradeBook::setCourseName(string name)
No1imit
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 65
19.07.2015, 12:32  [ТС]     Вывод текста посредством элемент-функций класса #3
Цитата Сообщение от Cra3y Посмотреть сообщение
потому что в конструкторе GradeBook::GradeBook(string name) вызывается функция void GradeBook::setCourseName(string name)
И что? Насколько я понял, параметр конструктора передается setCourseName(string name) и всё. А дальше работа идет в самой set-функции. С выводом что-то я до сих пор не разобрался.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
19.07.2015, 12:37     Вывод текста посредством элемент-функций класса #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от No1imit Посмотреть сообщение
И что?
а то что конструктор вызывается при создании объекта. А где вы создаете объект?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11801 / 6780 / 765
Регистрация: 27.09.2012
Сообщений: 16,833
Записей в блоге: 2
Завершенные тесты: 1
19.07.2015, 12:38     Вывод текста посредством элемент-функций класса #5
Цитата Сообщение от No1imit Посмотреть сообщение
И что?
ну вот возьмите и пройдитесь по коду.

не подсматривать

C++
1
GradeBook gradeBook1("CS101 Introduction to Programming in C++");
идем в конструктор. Там у нас
C++
1
setCourseName(name);
идем дальше по коду - в setCourseName
в этой функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    void GradeBook::setCourseName(string name)
    {
        if (name.length() <= 25) // в name у нас "CS101 Introduction to Programming in C++", то бишь символов больше, чем 25
            courseName = name; // значит сюда не попадем
 
        if (name.length() > 25) //о, да! Здесь явно больше 25 символов
        {
            // записать в courseName первые 25 символов параметра name
            courseName = name.substr(0, 25); // вырезаем
 
            cout << "Name \"" << name << "\" exceeds maximum length.\n"
                << "Limiting courseName to first 25 characters.\n" << endl; //Выводим сообщение
        }
    }//возвращаемся восвояси
No1imit
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 65
19.07.2015, 12:43  [ТС]     Вывод текста посредством элемент-функций класса #6
Цитата Сообщение от Cra3y Посмотреть сообщение
а то что конструктор вызывается при создании объекта.
Главное, что я читал ведь об этом, но почему-то из головы вылетело. Спасибо.

Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
ну вот возьмите и пройдитесь по коду.
Хорошие у вас комментарии, не такие как в книге

Croessmah
19.07.2015, 12:47
  #7

Не по теме:

Цитата Сообщение от No1imit Посмотреть сообщение
Хорошие у вас комментарии, не такие как в книге
если Вам не понятно изложение какого-то куска материала в книге, то почитайте об этом в других книгах.
Если не понятно изложение материала в большей части книги, то поменяйте книгу

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2015, 12:50     Вывод текста посредством элемент-функций класса
Еще ссылки по теме:

C++ Вызов функций в наследниках класса
Перегрузка функций, шаблон класса C++
Массив функций класса C++

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

Или воспользуйтесь поиском по форуму:
No1imit
19.07.2015, 12:50  [ТС]     Вывод текста посредством элемент-функций класса
  #8

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
Если не понятно изложение материала в большей части книги, то поменяйте книгу
Я имел в виду, что в книге более строгие комментарии, а на счёт конструктора - не знаю как такое из головы вылетело, важная вещь то.

Yandex
Объявления
19.07.2015, 12:50     Вывод текста посредством элемент-функций класса
Ответ Создать тему
Опции темы

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