Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
1

Сколько раз вызывается конструктор копирования

27.06.2010, 18:31. Просмотров 822. Ответов 8
Метки нет (Все метки)

Почему n не увеличивается?
Код
Point(const Point& src){
		n++;
		set(src.x+1, src.y+1);
		cout << "Konstruction copyrovanija vizivaetsja v " << n << " raz" << endl;
Весь код:
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <stdafx.h>
#include <conio.h>
using namespace std;
class Point{
private:
    int x,y;
    int n;
public:
    Point(){
}
    Point(int new_x, int new_y){
        set(new_x,new_y);
    }
    Point(const Point& src){
        n++;
        set(src.x+1, src.y+1);
        cout << "Konstruction copyrovanija vizivaetsja v " << n << " raz" << endl;
    }
    Point add(const Point& pt){
        Point new_pt;
        new_pt.x=x+pt.x;
        new_pt.y=y+pt.y;
        return new_pt;
    }
    Point sub(const Point& pt){
        Point new_pt;
        new_pt.x=x-pt.x;
        new_pt.y=y-pt.y;
        return new_pt;
    }
    Point operator+(const Point& pt){
        return add(pt);
    }
    Point operator-(const Point& pt){
        return sub(pt);
    }
    void set(int new_x,int new_y){
        if (new_x<0)
            new_x*=-1;
        if (new_y<0)
            new_y*=-1;
        x=new_x;
        y=new_y;
    }
    int get_x() const{
        return x;
    }
    int get_y() const{
        return y;
    }
};
int main(){
    Point point1(20,20);
    Point point2(0,5);
    Point point3(-10,25);
    Point point4=point1+point2+point3;
    cout << "The point is " << point4.get_x();
    cout << ", " << point4.get_y() << "." << endl;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2010, 18:31
Ответы с готовыми решениями:

НЕ вызывается конструктор копирования
НЕ вызывается конструктор копирования (не явно), как сделать чтобы это было...

Почему не вызывается конструктор копирования?
...У меня в книге описаны случаи при которых вызывается конструктор...

Когда вызывается конструктор копирования?
Пожалуйста помогите ответить на вопрос &quot;Когда вызывается конструктор...

Почему не вызывается конструктор копирования при возврате объекта из функции
Добрый день! Насколько мне известно, конструктор копирования вызывается:...

В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать?
В книге Г. Шилдта написано, что конструктор копирования может неявно...

8
vladislavchick
35 / 35 / 8
Регистрация: 22.05.2010
Сообщений: 107
27.06.2010, 18:36 2
n должно быть статическим компонентом класса, а перед использованием инициализировано нулём.
Описание:
C++
1
static int n;
Инициализация (вне тела класса):
C++
1
Point::n = 0;
0
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
27.06.2010, 18:46  [ТС] 3
Цитата Сообщение от vladislavchick Посмотреть сообщение
n должно быть статическим компонентом класса, а перед использованием инициализировано нулём.
Описание:
C++
1
static int n;
Инициализация (вне тела класса):
C++
1
Point::n = 0;
Что это означает:
static int n;
0
ForEveR
В астрале
Эксперт С++
7996 / 4755 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
27.06.2010, 18:51 4
Цитата Сообщение от Lotles Посмотреть сообщение
Что это означает:
static int n;
Статическая переменная целого типа. Про статические переменные читай в нете или учебниках
0
mih
6 / 6 / 3
Регистрация: 10.05.2010
Сообщений: 56
27.06.2010, 20:34 5
во первых n не инициализировано, во вторых конструктор копирования не вызывается ни разу )
0
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
27.06.2010, 20:55  [ТС] 6
Цитата Сообщение от mih Посмотреть сообщение
во первых n не инициализировано, во вторых конструктор копирования не вызывается ни разу )
Переменная автоматически инициализируется нулем, конструктор копирования выз-ся 2 раза в функции add,- вроде так !
0
mih
6 / 6 / 3
Регистрация: 10.05.2010
Сообщений: 56
28.06.2010, 22:52 7
1.у мну сама не инициализируется (
2.конструктор копирования вызывается при объявлении
Point point4=point1+point2+point3; и одновременном присваивании т.е у тя 1раз.
add его не вызывает..
0
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
30.06.2010, 18:46  [ТС] 8
Цитата Сообщение от mih Посмотреть сообщение
1.у мну сама не инициализируется (
2.конструктор копирования вызывается при объявлении
Point point4=point1+point2+point3; и одновременном присваивании т.е у тя 1раз.
add его не вызывает..
Как вы тогда объясните, что эта надпись появляется 2 раза
Код
 cout << "Konstruction copyrovanija vizivaetsja v " << n << " raz" << endl;
0
kazak
3058 / 2379 / 255
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
30.06.2010, 19:32 9
Цитата Сообщение от Lotles Посмотреть сообщение
Как вы тогда объясните, что эта надпись появляется 2 раза
Конструктор копирования вызывается для временных объектов, в которых хранятся промежуточные результаты сложения. Первый объект получает результат point1 + point2, второй - <первый объект>+point3. А далее выполняется point4 = <второй объект>.
1
30.06.2010, 19:32
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2010, 19:32

Будет ли утрачена память, когда конструктор копирования вызывается для уже существующего объекта класса?
class A { char * v; A(); ~A(); A(const A &amp;obj); } /////////////////////...

Конструктор вызывается один раз, а деструктор два раза
Программа для обработки исключений. Вообщем если ввести два числа и второе...

При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О
Вот такой кодclass A { public: A(){} virtual ~A(){} }; class C {...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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