P
proahead
Использую компилятор DEV C++ ( version 4.9.9.2)
Читал книгу Джесса Либерти С++ за 21 день. Пытался разобраться в листинге, который был посвящен конструктору копировщику.
Вот этот листинг
Это пример так называемого глубинного копирования, выполняемого конструктором копировщиком при котором он размещает переменные члены создаваемого им объекта в адресах отличных от адресов переменных-членов с которых выполнялось копирование.
Там же в книге отмечается, что существует еще поверхностное копирование, когда, например, адреса переменных членов созданного копированием объекта совпадают с адресами переменных членов объекта с которого выполняются копирование.
Я пытался посмотреть, как же это все таки может быть и ничего не получилось. Поэтому прошу вас ответить на вопросы.
1. Как мне изменить эту программу, чтобы адреса переменных-членов созданного копированием объекта и того объекта с которого выполнялось копирование совпадали, т.е. было выполненное поверхностное копирование?
2. Посоветуйте пожалуйста хорошую книгу по C++ где бы изложение было последовательным и насколько позволяет изложение в книги полным.
3. И какой-нибудь практикум, а то я не смогу выучить этот язык((
Читал книгу Джесса Либерти С++ за 21 день. Пытался разобраться в листинге, который был посвящен конструктору копировщику.
Вот этот листинг
C++:
#include <cstdlib>
#include <iostream>
using namespace std;
class Cat {
public:
Cat();
Cat(const Cat &);
~Cat();
int GetAge() const {return *itsAge; }
int GetWeight() const { return *itsWeight; }
void SetAge(int age) { *itsAge=age; }
void Address() {cout<<"Adrees "<<&itsAge<<"\n\n";}
private:
int * itsAge;
int *itsWeight;
};
Cat :: Cat()
{
itsAge=new int;
itsWeight=new int;
*itsAge=5;
*itsWeight=10;
}
Cat :: Cat (const Cat & rhs)
{
itsAge=new int;
itsWeight=new int;
*itsAge=rhs.GetAge();
*itsWeight=*(rhs.itsWeight);
}
Cat :: ~Cat()
{
delete itsAge;
itsAge=0;
delete itsWeight;
itsWeight=0;
}
int main()
{
Cat frisky;
cout<<"frisky's age "<<frisky.GetAge()<<endl;
cout<<"Setting frisky to 6 ... \n";
frisky.SetAge(6);
cout<<"creating boots from frisky...\n";
Cat boots(frisky);
cout<<"frisky's age "<<frisky.GetAge()<<"\n";
frisky.Address();
cout<<"boots' age "<<boots.GetAge()<<"\n";
boots.Address();
frisky.SetAge(7);
cout<<"fisky's age "<<frisky.GetAge()<<"\n";
cout<<"boot's age "<<boots.GetAge()<<"\n";
system("PAUSE");
return EXIT_SUCCESS;
}
Там же в книге отмечается, что существует еще поверхностное копирование, когда, например, адреса переменных членов созданного копированием объекта совпадают с адресами переменных членов объекта с которого выполняются копирование.
Я пытался посмотреть, как же это все таки может быть и ничего не получилось. Поэтому прошу вас ответить на вопросы.
1. Как мне изменить эту программу, чтобы адреса переменных-членов созданного копированием объекта и того объекта с которого выполнялось копирование совпадали, т.е. было выполненное поверхностное копирование?
2. Посоветуйте пожалуйста хорошую книгу по C++ где бы изложение было последовательным и насколько позволяет изложение в книги полным.
3. И какой-нибудь практикум, а то я не смогу выучить этот язык((