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

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

Войти
Регистрация
Восстановить пароль
 
No1imit
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 67
#1

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

19.07.2015, 12:23. Просмотров 215. Ответов 7
Метки нет (Все метки)

Не могу понять, почему в одном случае текст выводится, а в другом нет. Есть определение элемент-функций:
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;
Условие выполнено, но почему сразу в начале программы идет вывод этого текста?
Я чуть-чуть потерялся походу в этом всём
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2015, 12:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод текста посредством элемент-функций класса (C++):

Изменение статического закрытого элемента данных класса посредством статической элемент-функции класса - C++
Добрый день. Не могу разобраться, как изменить закрытую статическую переменную класса. Вот код. Ошибка &quot;unresolved external&quot;. ...

Работа с элементами матрицы посредством функций - C++
Дана целочисленная квадратная матрица. Определить: а) сумму элементов в тех столбцах, которые не содержат отрицательных элементов; б)...

Записать тригонометрические выражения посредством библиотечных функций и вычислить их - C++
Нужно написать программу, в которой пользователь вводит альфа(alpha), а программа бы считывала и выводила z1 и z2 z1=cos в квадрате от...

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

Если номер элемента массива равен ASCII-коду символа текста, инкрементировать элемент (файловый ввод/вывод) - C++
задача с частотным анализом. создаю массив из 256 элементов, значения которых равны нулю. считываю построчно текст из файла. если...

не удается передать объект из одного класса в другой посредством return - C++
есть класс Reading,в котором находится два объекта типа string :text и line,их я передаю с помощью двух аналогичных методов std::string...

7
Max Dark
шКодер самоучка
1851 / 1651 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
19.07.2015, 12:27 #2
No1imit, потому что в конструкторе GradeBook::GradeBook(string name) вызывается функция void GradeBook::setCourseName(string name)
1
No1imit
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 67
19.07.2015, 12:32  [ТС] #3
Цитата Сообщение от Cra3y Посмотреть сообщение
потому что в конструкторе GradeBook::GradeBook(string name) вызывается функция void GradeBook::setCourseName(string name)
И что? Насколько я понял, параметр конструктора передается setCourseName(string name) и всё. А дальше работа идет в самой set-функции. С выводом что-то я до сих пор не разобрался.
0
Max Dark
шКодер самоучка
1851 / 1651 / 603
Регистрация: 09.10.2013
Сообщений: 3,678
Записей в блоге: 6
Завершенные тесты: 2
19.07.2015, 12:37 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от No1imit Посмотреть сообщение
И что?
а то что конструктор вызывается при создании объекта. А где вы создаете объект?
1
Croessmah
Ушел
Эксперт CЭксперт С++
13553 / 7704 / 872
Регистрация: 27.09.2012
Сообщений: 19,006
Записей в блоге: 3
Завершенные тесты: 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; //Выводим сообщение
        }
    }//возвращаемся восвояси
1
No1imit
2 / 2 / 0
Регистрация: 19.04.2015
Сообщений: 67
19.07.2015, 12:43  [ТС] #6
Цитата Сообщение от Cra3y Посмотреть сообщение
а то что конструктор вызывается при создании объекта.
Главное, что я читал ведь об этом, но почему-то из головы вылетело. Спасибо.

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

Не по теме:

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

0
Croessmah
19.07.2015, 12:47
  #7

Не по теме:

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

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

Не по теме:

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2015, 12:50
Привет! Вот еще темы с ответами:

Удалить элемент вектора посредством erase - C++
# include &lt;iostream&gt; # include &lt;vector&gt; # include &lt;iterator&gt; # include &lt;string&gt; # include &lt;fstream&gt; using namespace std; ...

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. - C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

Вывод дней недели посредством switch - C++
Напишите 3 варианта switch для печати названий дней недели, используя различные типы его параметра : целое, символ и перечисление

Ввод/вывод чисел посредством unsigned char - C++
Здравствуйте.Столкнулся с проблемой. Как правильно вводить/выводить unsigned char? #include&lt;iostream&gt; using namespace std; ...


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

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

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