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

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

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

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

27.06.2010, 18:31. Просмотров 737. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2010, 18:31     Сколько раз вызывается конструктор копирования
Посмотрите здесь:

C++ Почему не вызывается конструктор копирования?
Будет ли утрачена память, когда конструктор копирования вызывается для уже существующего объекта класса? C++
Конструктор вызывается один раз, а деструктор два раза C++
Когда вызывается конструктор копирования? C++
C++ Как подсчитать, сколько раз вызван конструктор?
C++ При создании класса конструктор вызывается 2 раза, затем вызывается деструктор о_О
C++ В каких случаях вызывается конструктор копирования, и стоит ли вообще об этом думать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vladislavchick
35 / 35 / 1
Регистрация: 22.05.2010
Сообщений: 107
27.06.2010, 18:36     Сколько раз вызывается конструктор копирования #2
n должно быть статическим компонентом класса, а перед использованием инициализировано нулём.
Описание:
C++
1
static int n;
Инициализация (вне тела класса):
C++
1
Point::n = 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;
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.06.2010, 18:51     Сколько раз вызывается конструктор копирования #4
Цитата Сообщение от Lotles Посмотреть сообщение
Что это означает:
static int n;
Статическая переменная целого типа. Про статические переменные читай в нете или учебниках
mih
6 / 6 / 1
Регистрация: 10.05.2010
Сообщений: 56
27.06.2010, 20:34     Сколько раз вызывается конструктор копирования #5
во первых n не инициализировано, во вторых конструктор копирования не вызывается ни разу )
Lotles
1 / 1 / 0
Регистрация: 29.12.2009
Сообщений: 167
27.06.2010, 20:55  [ТС]     Сколько раз вызывается конструктор копирования #6
Цитата Сообщение от mih Посмотреть сообщение
во первых n не инициализировано, во вторых конструктор копирования не вызывается ни разу )
Переменная автоматически инициализируется нулем, конструктор копирования выз-ся 2 раза в функции add,- вроде так !
mih
6 / 6 / 1
Регистрация: 10.05.2010
Сообщений: 56
28.06.2010, 22:52     Сколько раз вызывается конструктор копирования #7
1.у мну сама не инициализируется (
2.конструктор копирования вызывается при объявлении
Point point4=point1+point2+point3; и одновременном присваивании т.е у тя 1раз.
add его не вызывает..
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;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2010, 19:32     Сколько раз вызывается конструктор копирования
Еще ссылки по теме:

Конструктор вызывается 2 раза C++
C++ Почему не вызывается конструктор копирования при возврате объекта из функции
Не вызывается конструктор C++
C++ Какой конструктор вызывается ?
Вызывается не тот конструктор C++

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

Или воспользуйтесь поиском по форуму:
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
30.06.2010, 19:32     Сколько раз вызывается конструктор копирования #9
Цитата Сообщение от Lotles Посмотреть сообщение
Как вы тогда объясните, что эта надпись появляется 2 раза
Конструктор копирования вызывается для временных объектов, в которых хранятся промежуточные результаты сложения. Первый объект получает результат point1 + point2, второй - <первый объект>+point3. А далее выполняется point4 = <второй объект>.
Yandex
Объявления
30.06.2010, 19:32     Сколько раз вызывается конструктор копирования
Ответ Создать тему
Опции темы

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