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

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

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

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

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

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

Всем доброго дня !

Подскажите пожалуйста , почему при выводе строки

Код:
cout<<"\n******* "<<EmptyClass["Bill"].GetName()<<" is "<<EmptyClass["Bill"].GetAge();
выводятся эти сообщения ?

какие то левые обьекты создаются

Код:
#include <iostream>
#include <string>
#include <map>
#include <conio.h>


using namespace std;

class Student

{

public:

	Student();

	Student(const string & name, const int age);

	Student(const Student & rhs);

	~Student();

	void SetName(const string & name);

	string GetName() const;

	void SetAge(const int age);

	int GetAge() const;

	Student & operator = (const Student & rhs);

private:

	string itsName;

	int itsAge;
};


Student :: Student()

: itsName("New Student"), itsAge(16)

{printf("\nKONST 1 %p\n",this);}

Student :: Student(const string & name, const int age)

: itsName(name), itsAge(age)

{printf("\nKONST 2 %p\n",this);}

Student :: Student(const Student & rhs)

: itsName(rhs.GetName()), itsAge(rhs.GetAge())

{printf("\nKONST copy %p %p\n",this,& rhs);}

Student :: 	~Student()

{printf("\nDES  %p\n",this);}

void Student :: SetName(const string & name)

{ 
	itsName = name;
}

string Student :: GetName() const

{
	//printf("\nGetName() %p\n",this);

	return 	itsName;
}

void Student :: SetAge(const int age)

{
	itsAge = age;
}

int Student :: GetAge() const

{
	//printf("\nGetAge() %p\n",this);

	return 	itsAge;
}


Student & Student :: operator = (const Student & rhs)

{
	printf("\noperator = %p %p\n",this,& rhs);

	itsName = rhs.GetName();

	itsAge = rhs.GetAge();

	return *this;
}

ostream & operator << (ostream & os, const Student & rhs)

{
	printf("\noperator << = %p \n\n",& rhs);

	os << rhs.GetName() <<" is "<<rhs.GetAge() <<" yeare old";

	return os;
}

template <class T,class A>

void ShowVector(const map <T,A> & v);

typedef map <string, Student> SchoolClass;

int main()

{
	Student Harry("Harry",18);

	printf("\nHarry = %p \n",& Harry);

	Student Sally("Sally",15);

	printf("\nSally = %p \n",& Sally);

	Student Bill("Bill",17);

	printf("\nBill = %p \n",& Bill);

	Student Peter("Peter",17);

	printf("\nPeter = %p \n",& Peter);

    printf("\n**************************\n");

	SchoolClass EmptyClass;

	printf("\n**************************\n");

	EmptyClass[Harry.GetName()] = Harry;

	EmptyClass[Sally.GetName()] = Sally;

	EmptyClass[Bill.GetName()] = Bill;

	EmptyClass[Peter.GetName()] = Peter;

	printf("\n++++++++++++++++++++++++++\n");

	
	ShowVector(EmptyClass);

	printf("\n++++++++++++++++++++++++++\n");

	cout<<"\n******* "<<EmptyClass["Bill"].GetName()<<" is "<<EmptyClass["Bill"].GetAge();
	
	getch();

	return 0;
}

template <class T,class A>

void ShowVector(const map <T,A> & v)

{
	

	for(map <T,A> :: const_iterator c1 = v.begin(); c1 != v.end(); ++c1)

	cout<<c1->first<<": "<<c1->second<<"\n";

	cout<<endl;
}
Изображения
Тип файла: jpg Безы.JPG (44.7 Кб, 57 просмотров)
RAFA91 вне форума Ответить с цитированием
Старый 25.05.2015, 17:03   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Они выводятся не при выводе этой строки. Начните с любой книжки по С++ - прочтите, например, что такое конструктор и деструктор и когда они вызываются.
p51x вне форума Ответить с цитированием
Старый 25.05.2015, 17:13   #3
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

Я В КУРСАХ что такое констуктор и деструктор.

когда я блокирую эту строку

cout<<"\n******* "<<EmptyClass["Bill"].GetName()<<" is "<<EmptyClass["Bill"].GetAge();,

то этих сообщений нет.

почему при вызове
Код:
EmptyClass["Bill"].GetName()
Код:
EmptyClass["Bill"].GetAge()
я получаю эти сообщения ?

Последний раз редактировалось RAFA91; 25.05.2015 в 17:39.
RAFA91 вне форума Ответить с цитированием
Старый 25.05.2015, 18:27   #4
Smogg
Участник клуба
 
Регистрация: 14.06.2011
Сообщений: 1,138
По умолчанию

Цитата:
Сообщение от RAFA91 Посмотреть сообщение
почему при вызове
Код:
EmptyClass["Bill"].GetName()
Код:
EmptyClass["Bill"].GetAge()
я получаю эти сообщения ?
Где-то вызывается конструктор копирования, о чем и сообщается.
Smogg вне форума Ответить с цитированием
Старый 25.05.2015, 20:05   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Конструктор копирования будет вызываться если элемента Bill нет в коллекции... но он вроде должен быть...
waleri вне форума Ответить с цитированием
Старый 26.05.2015, 12:40   #6
RAFA91
Заблокирован
 
Регистрация: 06.02.2011
Сообщений: 1,999
По умолчанию

элемент билл есть

Код:
EmptyClass[Bill.GetName()] = Bill;
меня интересует , что это за временные обьекты ?

для чего они ?
RAFA91 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Карта kuba1981 JavaScript, Ajax 5 30.08.2012 13:43
Карта Кристинка89 Помощь студентам 1 27.04.2012 18:15
3d карта SonicBob Помощь студентам 2 31.05.2011 02:18
Карта C++ mutabor Свободное общение 6 15.06.2009 23:36