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

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

Войти
Регистрация
Восстановить пароль
 
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
#1

Копирующий конструктор класса, содержащего переменную-член указатель - C++

23.08.2011, 08:40. Просмотров 962. Ответов 2
Метки нет (Все метки)

Практикуюсь по книге Стенли Липпмана "Язык программирования C++ вводный курс" 4 изд.
Упражнение 13.4. Используя приведенный ниже набросок класса, напишите конструктор копий, который копирует все его элементы. Скопируйте объект, на который указывает указатель pstring, а не сам указатель.

Вот как я реализовал данное упражнение:

no_name.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
#ifndef NONAME_H_
#define NONAME_H_
 
#include <string>
 
struct no_name {
    //стандартный конструктор
    no_name() : pstring( new std::string("999") ), i( 0 ), d( 0 ) {
 
    }
 
    //копирующий конструктор
    no_name(const no_name & src) : pstring( new std::string( *( src.pstring ) ) ), i( src.i ), d( src.d ) {
 
    }
 
 
private:
    std::string *pstring;
    int i;
    double d;
};
 
#endif /* NONAME_H_ */
test_struct_no_name

C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include "noname.h"
using namespace std;
 
int main() {
    no_name nn;
    no_name nn2( nn );
    cout << "" << endl; // prints 
    return 0;
}
Проверял через отладчик, указатели объектов nn и nn2 содержат разные адреса и по этим адресам находятся одинаковые значения "999".


Возникли следующие вопросы:
- приемлем ли мой вариант копирующего конструктора?
- если приемлем, то можно ли упростить выражение
C++
1
pstring( new std::string( *( src.pstring ) ) )
?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.08.2011, 08:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Копирующий конструктор класса, содержащего переменную-член указатель (C++):

Копирующий конструктор в списке инициализации членов класса - C++
Добрый день. Сегодня обнаружил кое-что для себя странное и непонятное. В общем-то смотрим код: #include &lt;iostream&gt; ...

Конструктор класса, содержащего только статические члены - C++
Практикуюсь по книге Стенли Липпмана &quot;Язык программирования C++ вводный курс&quot; 4 изд. Осваиваю главу 12.6 Статические члены класса. В...

Реализовать подсчет количества объектов класса, используя статическую переменную-член класса - C++
как реализовать подсчет количества объектов класса (используя статическую переменную-член класса), а также статическую функцию, которая...

Указатель на член структуры/класса - C++
Всем привет! Помогите разобраться. Пусть есть такой код: template &lt;typename Type&gt; class DynamicQueue { private: class Node { ...

Указатель на функцию - член класса. - C++
делаю так: class c1 { void foo(); } class c2 { void (*fp)();

Указатель на ф-цию член класса - C++
Чёрная магия или я бот? g++ sub.cpp:21: error: expected unqualified-id before ‘*’ token sub.cpp:21: error: must use ‘.*’ or...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ValeryLaptev
Эксперт С++
1040 / 819 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
23.08.2011, 08:53 #2
Пока криминала не обнаружено. Копирующий конструктор он жеж создает КОПИЮ исходного объекта. То есть значения полей должны быть одинаковы (указатели - разные, как и положено).
Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
23.08.2011, 09:03  [ТС] #3
ValeryLaptev, спасибо за комментарий.
То есть значения полей должны быть одинаковы (указатели - разные, как и положено).
Это я понимаю, к этому и стремился, но были сомнения в правильности выбранного метода.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.08.2011, 09:03
Привет! Вот еще темы с ответами:

Указатель на функцию-член класса - C++
Нужно передать указатель на функцию класса A изнутри самого класса А в функцию, в качестве аргумента классу B. #include &lt;Windows.h&gt;...

Что такое указатель на член класса? - C++
Что такое указатель на член класса?

Указатель на объект из указателя на член класса - C++
Что как-то сей вопрос ставит меня в тупик. class A { int i; } obj; int main()

Указатель на классы, объявленный как член класса - C++
Если у кого-то сохранились какие-либо статьи, заметки в памяти на тему указателей, пожалуйста, дайте примеры подробных примеров, статьи,...


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

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

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