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

Конструктор копировщик - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Создание вложенной папки (Directory) http://www.cyberforum.ru/cpp-beginners/thread342790.html
Добрый день, появилась необходимость создать вложенную папку в среде windows XP нашел тока #include <windows.h> CreateDirectory((LPCTSTR)"c:\\new",NULL); // но данный код не работает почему-то, к тому же я так понял проблема с преоразованием в LPCTSTR из char* или string у меня есть путь в переменной std::string path = "C:\\test\01\01"; , приэтом папки C:\\test еще нету, необходимо...
C++ Разложение числа на слагаемые Разложение числа на слагаемые - используется во многих задачах (как мне кажется - это тривиальная задача). И мне стало интересно: какой самый быстрый алгоритм разложения числа на слагаемые вы предложите? Думаю, максимальный тест n<=50. З.Ы. Проверю на время сам. И разложения должны быть без повторений (перестановка слагаемых не дает новых разложений) и чтоб строка слагаемых выводилась в файл... http://www.cyberforum.ru/cpp-beginners/thread342773.html
C++ Расчет краски на лабиринт
Условие задачи тут #include <iostream> using namespace std; void paint(int i, int j) { if (a=='.') { a='$'; paint(i+1,j); paint(i-1,j); paint(i,j+1);
C++ Создание нескольких стеков
//--------------------------------------------------------------------------- #pragma hdrstop #include <tchar.h> #include <stdlib.h> #include <iostream.h> #include <dos.h> //--------------------------------------------------------------------------- namespace Stack
C++ Сохранение матриц больших размеров в типизированный файл http://www.cyberforum.ru/cpp-beginners/thread342662.html
Проблема: есть большой двумерный массив (double). Пытаюсь сохранить его в типизированный файл (а затем считать в другой массив). В файл сохраняется только некоторая часть (до 58 элемента, в частном случае), на оставшиеся места записываются максимальное и минимальное значения double (+-6.2 * 10^66). Причем иногда прерывается посередине строки. Как будто память под строку выделилась не в одном...
C++ два ++ Что означает "++" что ето за операция в С++Builder очень надо узнать Напишите кто нибудь. подробнее

Показать сообщение отдельно
Сыроежка
Заблокирован
17.08.2011, 15:17     Конструктор копировщик
Цитата Сообщение от ramarren14 Посмотреть сообщение
Самостоятельно изучаю С++ по Либерти(освой за 21 день)
Требуется создать класс и конструктор копировщик. Компилятор Visual C++ 2010.
Выдает ошибку:
1>c:\users\selver\documents\visual studio 2010\projects\bufer\bufer\hgfh.cpp(42): error C2662: 'SimpleCircle::GetRadius' : cannot convert 'this' pointer from 'const SimpleCircle' to 'SimpleCircle &'

Хотя в книге написано что должно работать.
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
35
36
37
38
39
40
#include<iostream>
using namespace std;
 
class SimpleCircle{
public:
    SimpleCircle();
    ~SimpleCircle();
    SimpleCircle (const SimpleCircle &);
    int GetRadius (){return *itsRad;}
    void SetRadius(int x){*itsRad=x;}
    
private:
    int *itsRad;
};
 
SimpleCircle::SimpleCircle(){
    itsRad=new int;
    *itsRad=10;
}
 
 
 
 
SimpleCircle::~SimpleCircle(){
    delete itsRad;
    itsRad=0;
}
 
SimpleCircle::SimpleCircle (const SimpleCircle & rhs){
    itsRad=new int;
    *itsRad=rhs.GetRadius();
}
 
 
int main(){
    SimpleCircle Circl_one;
    SimpleCircle Circl_two(Circl_one);
    cout<<Circl_two.GetRadius();
    return 0;
}
По идее должно скопироваться значение itsRad объекта Circl_one. Я правильно понял?
Помимо синтаксической ошибки, что вы для константной ссылки вызываете неконстатный метод GetRadius, в вашем коде имеется серьезная ошибка утечки памяти.

Если один объект вашего класса присваивается другому объекту вашего класса, то происходит простое почленное копирование данных. А это значит, предыдущее значение указателя на int у вас просто теряется.
Вам нужно самому переопределить оператор присваивания, который будет аналогичен оператору копирования.

Можно написать обобщенный оператор присваивания.

C++
1
2
3
4
5
6
7
SimpleCircle & SimpleCircle::operator =  (const SimpleCircle & rhs )
{
   this->~SimpleCircle();
   new ( this ) SimpleCircle( rhs );
 
   return ( *this );
}
 
Текущее время: 12:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru