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

Константные функции-члены класса, возвращающие ссылку на константу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ интерфейс http://www.cyberforum.ru/cpp-beginners/thread340263.html
qt, winAPI, wxWidgets, winForms, MFC... что там еще можно использовать для создания графического интерфейса? Хотелось бы вкратце услышать описание каждого из "методов", преимущества/недостатки. ...
C++ Как записать правильно? Программа работает но код наверно не верен. #include <iostream> using namespace std; int main() { long sek; cout << "Enter the number of senonds: "; cin >> sek; http://www.cyberforum.ru/cpp-beginners/thread340237.html
C++ строки
народ че не так ? char *s1,*s2,*s3; int i = 0; while(s1 != " ") { in >> s1;// здесь выскакивает прерывание i++; }
C++ Неправильно считывается структура из файла
Записываю структуру А в файл, затем считываю в структуру В. Символы считываются нормально, а вот цвет фона+символа неправильно. #include <iostream> #include <fstream> #include <new> #include...
C++ Запись в Excel, чтение из файла и проблемы с русским языком http://www.cyberforum.ru/cpp-beginners/thread340207.html
Сразу несколько вопросов… Запись в Excel-евский документ: много читала в интернете и на вашем сайте конкретно, но, поскольку всё было как-то отрывками, а иной раз и вовсе не по теме, хочу конкретно...
C++ Программа для записи звуков. Приветствую всех. Хотелось бы узнать как можно реализовать запись звука с микрофона к примеру в формат wav. Подскажите где можно про это почитать или напишите пример. подробнее

Показать сообщение отдельно
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393

Константные функции-члены класса, возвращающие ссылку на константу - C++

08.08.2011, 21:09. Просмотров 7457. Ответов 64
Метки (Все метки)

Упражняюсь по книге Липпмана, выполняю задания по теме классы.
Необходимо реализовать класс person, который способен хранить имя и адрес человека, а также создать функции, возвращающие при обращении имя и адрес.
Вопрос, который ставит автор книги: "Должны ли эти функции быть константными? Объясните почему."
Вот тут я начал путаться. Вот моя реализация:
файл person.h
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
#ifndef PERSON_H_
#define PERSON_H_
 
class person {
public:
    //конструктор, принимающий две строки типа string
    person( std::string &_name, std::string &_addres ) :
        name( _name ), addres( _addres ) {
    }
    //метод, возвращающий addres
    const std::string &get_addres() const {
        return addres;
    }
    //метод, возвращающий name
    const std::string &get_name() const {
        return name;
    }
 
private:
    //поле для хранения имени
    std::string name;
    //поле для хранения адреса
    std::string addres;
};
 
#endif /* PERSON_H_ */
Для тестирования класса, файл test_class_person.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include "person.h"
using namespace std;
 
int main() {
    string str1 = "Alexander";
    string str2 = "Zelenogradsk";
    person pers( str1, str2 );
    cout << pers.get_name() << " " << pers.get_addres() << endl;
    
    string str3 = pers.get_name();
    str3 += "222";
    cout << str3 << " " << pers.get_name();
    return 0;
}
Я решил так
1) Константными эти функции должны быть, так как они не меняют значений переменных-членов объекта.
2) Возвращать они должны лишь константную ссылку на строку, а не просто тип string, дабы избежать ненужного копирования.
Прав ли я? Если нет, то объясните почему.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru