Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2015, 17:01   #1
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию вредный конструктор копировщик

подскажите пожалуйста почему когда я активирую

Nasa(Nasa & basa) {} (снимаю коментарий), то получаю

какие-то левые значения в строке printf("****** %d",V.fada());.

должен получить 122

Код:
#include <stdio.h>
#include <conio.h>


class Nasa

{
	int x;

public:

	int fada() const {return x;}

	Nasa() : x(122) {}

	~Nasa() {}

	//Nasa(Nasa & basa) {}
};

Nasa faga();


int main()

{
	Nasa V=faga();

	printf("****** %d",V.fada());

	

	getch();

	
return 0;


}

Nasa faga()

	{
		Nasa A;

		return A;
	}
RAFA91 вне форума Ответить с цитированием
Старый 17.03.2015, 21:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы в конструкторе копирования, копирование не пробовали написать?
вы ничего не копируете. вот и получаете мусор.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.03.2015, 12:57   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а вы в конструкторе копирования, копирование не пробовали написать?
вы ничего не копируете. вот и получаете мусор.
так а разве это не должен делать компилятор ?

извиняюсь - конструктор копирования в программе это по умолчанию или мой личный паразит ?
RAFA91 вне форума Ответить с цитированием
Старый 18.03.2015, 15:21   #4
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

компилятор это делает в том случае если конструктор копирования не прописан явно. как только коммент снят компилятор не участвует в кострукторе копирования.
f.hump вне форума Ответить с цитированием
Старый 18.03.2015, 17:25   #5
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

значит я сам себе нагадил в тапки.

______________________


исче такой вопрос.

переменная х класса в области динамической памяти.

B - обьект.

в книге написанно , что если выполнить B=B; то данные должны стереться.

но они по прежнему не меняются.

Код:
#include <stdio.h>
#include <conio.h>


class Nasa

{
	int *x;

public:

	int fada() const {printf("ASSSSS %p  \n\n",x); return *x;}

	Nasa(int a)  {x=new int(a);} 
	
	Nasa()  {x=new int(122); }

	~Nasa() {delete x; x=0;}

};

int main()

{
	Nasa V(13),K(17),B;

	printf("****** %p %p \n\n",&V,&K);
	
	printf("****** %d \n\n",V.fada());

	printf("****** %d\n\n",K.fada());
	
	printf("****** %d\n\n",B.fada());

	B=B;

	printf("****** %d \n\n",V.fada());

	printf("****** %d\n\n",K.fada());
	
	printf("****** %d\n\n",B.fada());


	


	getch();

	
return 0;


}

Последний раз редактировалось RAFA91; 18.03.2015 в 17:28.
RAFA91 вне форума Ответить с цитированием
Старый 18.03.2015, 17:31   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

.....................
Изображения
Тип файла: jpg ff.JPG (31.3 Кб, 108 просмотров)
RAFA91 вне форума Ответить с цитированием
Старый 19.03.2015, 17:52   #7
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

С чего бы им стираться? В книге наверно и пример другой. x будет очищена в данном случае только при вызове деструктора Nasa, а он не будет вызван до завершения программы в вашем случае.
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 20.03.2015, 15:00   #8
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

взникла проблема с выполнением строки K=A++;

при выполнении printf("\n__________ %d\n",K.gasaaa()); получаю левые числа вместо 6.

чувствую что проблема в Fasa operator ++ (int ff) или в копировщике.

Подскажите пожалуйста где я накосячил ??

___________________________________ _____________

Код:

#include <stdio.h>
#include <conio.h>
 
class Fasa
 
{
    int *x;
 
public:
 
    Fasa()  {x=new int(5);}
 
    Fasa(int f) {x=new int(f);}
 
    ~Fasa() {delete x; x=0;}
 
    Fasa(Fasa &j) 
    
    {
        x=new int;
 
        *x=j.gasaaa();
    }
    
    int gasaaa() const {return *x;}
 
     Fasa & operator ++ ()
 
    {
        *x=(*x)++;
        
        return *this;
    }
 
     Fasa  operator ++ (int ff)
 
    {
        Fasa A(*this);
 
        *x=(*x)++;
 
        return A;
    }
};
 
int main()
 
{
     
    Fasa A,K;
 
    printf("\n__________ %d\n",A.gasaaa());
    
    printf("\n__________ %d\n",K.gasaaa());
    
    K=++A;
 
    printf("\n__________ %d\n",A.gasaaa());
    
    printf("\n__________ %d\n",K.gasaaa());
 
    K=A++;
 
    printf("\n__________ %d\n",A.gasaaa());
    
    printf("\n__________ %d\n",K.gasaaa());
    
    getch();
 
    return 0;
 
}
RAFA91 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
конструктор С++ zla9_kolu4ka Общие вопросы C/C++ 2 07.03.2014 00:22
Вредный DBChart Greekus Помощь студентам 1 05.09.2011 10:44
С++ (конструктор, деструктор, копирующий конструктор) Jane-sad Помощь студентам 2 01.10.2010 10:01
конструктор An123 Помощь студентам 1 17.01.2010 17:14
Конструктор PilGrim Общие вопросы C/C++ 0 16.01.2009 10:21