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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Не работает отправка письма http://www.cyberforum.ru/cpp-beginners/thread344464.html
Добрый вечер. Помогите советом. Код: IdSMTP1->UserId = "stas67@yandex.ru"; IdSMTP1->Password = "*******"; IdSMTP1->Host = "smtp.yandex.ru";
C++ Прошу небольшой помощи Добрый вечер господа. В Этой теме(Кликабельно), я определился с тем, что начну изучение C++ И у меня к Вас возникает вопрос. Посоветуйте какие-либо книги, пособия, возможны как электронные, так и печатные издания, и сайты для новичком, если можно. Заранее спасибо. С Уважением, жду ответов. http://www.cyberforum.ru/cpp-beginners/thread344457.html
C++ long long int и его поведение в структуре
#include <iostream> struct IndexBase { public: int x; int y; int z; unsigned int lastChange; unsigned long long int pos; unsigned short int size;
C++ Программа постоянно печатает степени целого числа 2
Напишите программу, которая постоянно печатает степени целого числа 2, соответственно 2, 4, 8, 16, 32, 64 и т.д. Число повторений вашего цикла не должно, быть определено (т.е. вы должны создать бесконечный цикл). Что случилось, когда вы выполнили эту программу? Ничего не выводит, где я не прав ? #include "stdafx.h" #include <iostream> using namespace std;
C++ Программа, которая читает сторону квадрата и рисует его звездочками и пробелами http://www.cyberforum.ru/cpp-beginners/thread344413.html
Напишите программу с ООП подходом, которая читает размер стороны квадрата и затем печатает звездочками и пробелами пустой квадрат заданного размера. Ваша программа должна работать для любых размеров, заданных в интервале 1-20. Например, если программа прочла размер 5, она должна напечатать: ***** *----* *----* *----* *****
C++ подпрограмма для универсальной сортировки извините за то, что опять прошу помощи. нужно разработать алгоритм и описать подпрограмму для универсальной сортировки произвольного массива с произвольным базовым типом. Подпрограмме передается массив как нетипизованный параметр, его длина, размер элемента и логическая функция сравнения двух элементов массива. Я был бы очень признателен, если бы эта программа была написана на Си, потому что... подробнее

Показать сообщение отдельно
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
23.08.2011, 08:40     Копирующий конструктор класса, содержащего переменную-член указатель
Практикуюсь по книге Стенли Липпмана "Язык программирования 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 ) ) )
?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 11:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru