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

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

Войти
Регистрация
Восстановить пароль
 
 
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
#1

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

21.10.2012, 20:50. Просмотров 686. Ответов 17
Метки нет (Все метки)

Можно ли вызвать в конструкторе копий, конструктор, если объекту нечего передавать? Класс - абстрактный. В конструкторе идет подсчет созданных объектов, поэтому хотелось бы, чтобы конструктор копий вызывал конструктор.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.10.2012, 20:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Конструктор копий (C++):

Конструктор копий - C++
Добрый день! Пытаюсь разобраться с конструктором копий, а именно: когда его использовать и как реализовать. С первым, вроде как,...

Конструктор копий - C++
Добрый день, изучая работу со списками и классы, дошел до такой проблемы: Нужно было создать односвязный список и продлить его же...

Классы: конструктор копий - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка Есть некоторые наброски , посмотрите...

Конструктор копий по умолчанию. - C++
Почему, когда в vc++ vdfsadsad Добавлено через 46 секунд Почему если идёшь по коду с заходом в функцию не отображается вызов...

Конструктор копий. Оператор присваивания - C++
В классе есть массив char (не динамический) размером 40 байт. Вопрос1: нужно ли для такого класса определять конструктор копий или...

Что такое конструктор копий? - C++
Объясните, пожалуйста, на максимально простом языке, чем отличается конструктор от конструктора копий? Может это и одно и то же, хотя...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 20:58 #2
Это имеете в виду?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Foo
{
    Foo()
    {
 
    }
 
    Foo(const Foo&): Foo()
    {
 
    }
};
 
int main()
{
    /* code */
    return 0;
}
Если да, то только в C++11
0
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
21.10.2012, 21:00  [ТС] #3
Можно ли такое сделать в абстрактном классе?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
21.10.2012, 21:21 #4
Цитата Сообщение от OlVD Посмотреть сообщение
Можно ли такое сделать в абстрактном классе?
Не уверен, что понял вопрос.
У вас есть класс в котором кроме методов, есть счётчик влияющий на их работу?
Тогда может так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class AbstrFunClass{
public:
static int m_count=0;
void foo1();
void foo2(int b);
float foo3(bool c);
private:
AbstrFunClass();//запретили создание объекта по умолчанию на всякий)
}
//определили методы
*****************
//
обращаемся через имя типа:
AbstrFunClass::m_count++;//к счетчику
к методам:
AbstrFunClass::foo1();
счётчик можно и закрыть. Если определились вызов какого метода/дов класса аналогичен созданию нового экземпляра, в вашем случае, - в этом методе/дах можно инкрементировать счётчик, не обращаясь к нему непосредственно.
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 21:22 #5
OlVD, да, если есть поддержка C++11
0
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
21.10.2012, 21:35  [ТС] #6
У меня абстрактный класс родитель. Нельзя создать ни одного объекта этого класса. Вот именно в нем, как можно переопределить конструктор копирования, чтобы он вызывал конструктор этого же класса?
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
21.10.2012, 21:42 #7
Цитата Сообщение от OlVD Посмотреть сообщение
У меня абстрактный класс родитель. Нельзя создать ни одного объекта этого класса. Вот именно в нем, как можно переопределить конструктор копирования, чтобы он вызывал конструктор этого же класса?
Если класс не имеет конструктора, то есть нельзя создать объект, что же копировать?
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 21:46 #8
Цитата Сообщение от OlVD Посмотреть сообщение
У меня абстрактный класс родитель
А. Ну да. IGPIGP, ответил уже.
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.10.2012, 22:11 #9
Цитата Сообщение от IGPIGP Посмотреть сообщение
Если класс не имеет конструктора, то есть нельзя создать объект
если конструктор неописан явно то это не значит что его нет, а объект нельзя создать потому что класс абстрактный т.е. имеет хотя бы одну чисто виртуальную функцию
1
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
21.10.2012, 22:14  [ТС] #10
Конструктор описан явно.

Добавлено через 2 минуты
C++
1
2
3
4
5
class X {
public:
  X() : { }
  X(const X &) : X() { }
};
так не получается
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.10.2012, 22:16 #11
Цитата Сообщение от OlVD Посмотреть сообщение
так не получается
что мешает увеличить счетчик в теле конструктора копий?
0
OlVD
0 / 0 / 0
Регистрация: 10.07.2012
Сообщений: 29
21.10.2012, 22:17  [ТС] #12
два раза прописывать одно и тоже???
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.10.2012, 22:19 #13
Цитата Сообщение от OlVD Посмотреть сообщение
два раза прописывать одно и тоже???
ну если так уж много дейсвий, вынеси в отдельный метод и вызывай из конструкторов
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6467 / 3115 / 306
Регистрация: 04.12.2011
Сообщений: 8,590
Записей в блоге: 4
21.10.2012, 22:19 #14
Цитата Сообщение от Jupiter Посмотреть сообщение
если конструктор неописан явно то это не значит что его нет, а объект нельзя создать потому что класс абстрактный т.е. имеет хотя бы одну чисто виртуальную функцию
Если конструктор не описан то его предоставит система. Я и имел ввиду случай когда он не нужен. Объект же создать у такого класса нельзя. Указатель на базовый класс (в том числе абстрактный) можно. Может ТС покажет код, тогда будет понятнее.
0
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
21.10.2012, 22:35 #15
Фу, е-мое. Сбили меня с панталыку своими абстрактными, правильно же говорил
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
41
42
43
44
45
#include <iostream>
#include <cstdlib>
 
class Foo
{
protected:
    static std::size_t _count;
 
public:
    Foo()
    {
        std::cout << "Foo()" << std::endl;
        ++_count;
    }
 
    Foo(const Foo&): Foo()
    {
        std::cout << "Foo(const Foo&)" << std::endl;
    }
 
    virtual ~Foo()
    {
        --_count;
    }
 
    virtual void foo() = 0;
};
 
std::size_t Foo::_count;
 
struct Bar: public Foo
{
    void foo()
    {
        std::cout << _count << std::endl;
    }
};
 
int main()
{
    Bar b;
    Bar b2(b);
    b.foo();
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2012, 22:35
Привет! Вот еще темы с ответами:

С++ Конструктор копий. Функция, работающая с объектами - C++
Конструктор копий должен работать в след. ситуациях: 1) В объявлении объекта, когда один объект используется для инициализации другого. ...

Конструктор копий из Jesse Liberty C++ Unleashed - C++
Уважаемые спецы, расскажите, пожалуйста, ламеру, что делает этот конструктор копий из книги Джесса Либерти? И зачем в него передается rhs? ...

Перегрузка оператора ++ , деструктор и конструктор копий - C++
Привет всем! В продолжение Этой темы появились новые вопросы и непонятки. Буду признателен за советы и разъяснения ;) Начну с...

Конструктор копий и перегруженный оператор копирования - C++
Привет! Изучил конструктор копий и перегруженный оператор копирования. Но не могу понять зачем в одном классе реализовывать и конструктор...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.10.2012, 22:35
Ответ Создать тему
Опции темы

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