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

Возвращаемый тип конструктора копирования в абстрактном классе - C++

Восстановить пароль Регистрация
 
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
20.08.2014, 00:36     Возвращаемый тип конструктора копирования в абстрактном классе #1
Здравствуйте!

Есть абстрактный класс (с "чистыми" виртуальными функциями), и в нем необходимо явно определить конструктор копирования. Но если написать, что возвращаемый тип - сам класс, то компилятор не допустит этого по понятным причинам. А если возвращать ссылку, или указатель, то придется выделять память на куче, чего делать совершенно не хочется.

Что делать?
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
20.08.2014, 00:40     Возвращаемый тип конструктора копирования в абстрактном классе #2
Вообще-то конструктор копирования ничего возвращать не должен.
C++
1
2
3
4
class A
{
    A(const A & Copy); // объявление конструктора копирования
};
relationer
33 / 0 / 0
Регистрация: 07.11.2013
Сообщений: 118
20.08.2014, 00:44  [ТС]     Возвращаемый тип конструктора копирования в абстрактном классе #3
Ой, прошу прощения за недосып, копирующий вариант оператора =.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
20.08.2014, 00:57     Возвращаемый тип конструктора копирования в абстрактном классе #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
И всё равно не вижу проблемы:
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>
#include <stdlib.h>
 
class abstract_class
{
public:
    virtual void func(void) = 0;
    void set_data(int data) { m_some_data = data; }
    abstract_class & operator=(const abstract_class & copy)
    {
        m_some_data = copy.m_some_data;
        return *this;
    }
protected:
    abstract_class(void) : m_some_data(100500) {}
    int some_data(void) const { return m_some_data; }
private:
    int m_some_data;
};
 
class derived: public abstract_class
{
public:
    virtual void func(void) { std::cout << some_data() << std::endl; }
};
 
int main(void)
{
    derived obj1;
    obj1.func();
 
    obj1.set_data(200500);
 
    derived obj2;
    obj2 = obj1;
    obj2.func();
 
    system("pause");
    return 0;
}
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
20.08.2014, 02:09     Возвращаемый тип конструктора копирования в абстрактном классе #5
Как тут вставить изображение?
расширенный режим -> вложения (скребка рядом со смайлом)
Yandex
Объявления
20.08.2014, 02:09     Возвращаемый тип конструктора копирования в абстрактном классе
Ответ Создать тему
Опции темы

Текущее время: 22:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru