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

Переопределение оператора присваивания - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ функция выдает код нажатой клавиши http://www.cyberforum.ru/cpp-beginners/thread144458.html
привет всем) подскажите пожалуйста есть ли такой оператор, который выдаст код нажатой клавиши,без нажатия клавиши ввода,т.е. нажали клавишу,сразу сохранился код клавиши...
C++ Hook клавиатуры Приветствую всех, подскажите мне, пожалуйста, как установить хук клавиатуры на кнопку F12? С хуками пытался разобраться... но не особо получается... Желательно по-подробнее. Заранее благодарю. http://www.cyberforum.ru/cpp-beginners/thread144444.html
C++ Строка содержит простое предложение
Помогите с заданием, буду очень благодарен... Строка содержит простое предложение, в котором слова отделяются символом «пробел». Сформировать вектор номеров позиций окончаний слов.
Черепашья графика C++
Многоугольник (не обязательно выпуклый) задан след. образом: длина очередной стороны, угол поворота к след. стороне (положительный или отрицательный) и т.д. Убедиться в корректности данных (замкнутости ломаной, с учетом погрешности вычислений) и вычислить площадь многоугольника. Набросайте пожалуйста примерный код на С++
C++ Вычисления площади круга. http://www.cyberforum.ru/cpp-beginners/thread144381.html
Пожалуйста, помогите, буду очень благодарен... Написать программу вычисления площади круга. Значение радиуса вводится в режиме диалога с ЭВМ. Предусмотреть вывод результата вычисления. Не знаю СИ, только знаю: S=Pi*r^2.
C++ Пoмогите со строками! Всем привет. В общем, даны 3 задачи: Дано слово: 1) Подсчитать количество согласных букв. 2) Определить количество вхождений первого символа. 3) Если слово четной длины, то обменять первую половину слова со второй, в противном случае обменять местами первые 2 символа с последними двумя, сохранив порядок следования. Мои вопросы: 1) #include<conio.h> подробнее

Показать сообщение отдельно
_lacrimosa_
1 / 1 / 0
Регистрация: 10.06.2010
Сообщений: 26
12.06.2010, 00:01     Переопределение оператора присваивания
Имеется такой простой класс:

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
class TClass
{
    private:
        float* A;
        int N;
    public:
        TClass(int _N)                      //конструктор
        {
            N = _N;
            A = new float [N];
        }
        ~TClass()                           //деструктор
        {
            delete [] A;
        }
        TClass& operator= (const TClass& B) //переопределённый оператор =
        {
            if (this == &B)
                return *this;
 
            N = B.N;
            delete [] A;
            A = new float [N];
            memcpy(A,B.A,N*sizeof(float));
            
            return *this;
        }
};
Суть проблемы в поведении операции присваивания. Примеры использования объектов класса:

1) В случае, если объекты класса статические, то всё ОК:

C++
1
2
3
4
5
6
void main()
{
    TClass C(10);
    TClass D(5);
    C=D;
}
2) В случае, если объекты класса создаются динамически:

C++
1
2
3
4
5
    TClass* C = new TClass(10);
    TClass* D = new TClass(5);
    C=D;  // FAIL
    delete C;
    delete D;
После выполнения операции присваивания во 2-ом случае, объекты C и D идентичны. Более того, расположены на одном участке памяти, причём массивы, содержащиеся в C и D, также расположены на одном участке памяти. При вызове delete C память освобождается. При вызове delete D получается ситуация, когда нужно удалить ту же самую память (удалённую при помощи delete C, так как C=D). Отмечу, что оператор = вообще не вызывается при выполнении программы, что странно. Если не ошибаюсь, то вызывается оператор присваивания по умолчанию и объекты становятся копиями. Всё работает как надо, если:

вместо

C++
1
C=D;  // FAIL
использовать

C++
1
C->operator=(*D);
Собственно вопрос, как такого избежать и что предпринять? Требуемый результат: данные в C и D должны быть одинаковые, но адреса объектов различны.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 22:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru