Укладчики,
Рассмотрим следующие два простых класса в заголовочном файле:
Class CC
{
public:
CC(int& value);
C& operator=(const C& other);
{
cout<<" From copy constructor ";
}
int m_cc;
};
Class AA
{
public:
AA( CC& refCC);
CC m_cInstance;
}
В файле .cpp содержится следующее.
CC:CC(int& value): m_cc(value)
{
cout<<" Constructor of CC" <<endl;
m_cc++;
}
AA:AA(CC& refCC): m_cInstance(refCC)
{
cout<<" The value of m_cc in refCC is: "<< refCC.m_cc;
cout<<" The address of m_cc in refCC is: "<< &refCC.m_cc;
cout<<" The address of refCC is: "<< &refCC;
cout<<" The value of m_cc in m_cInstance is: <<m_cInstance.m_cc;
cout<<" The address of m_cc in m_cInstance is: <<&m_cInstance.m_cc;
cout<<" The address of m_cInstance is: <<&m_cInstance;
}
Я использую два выше объявленных простых класса следующим образом в моем файле main.cpp:
int cvalue = 1000;
СС refCC (cvalue);
AA aaObj (refCC);
Вот вывод программы:
Constructor of CC
The value of m_cc in refCC is: 1001
The address of m_cc in refCC is: 0x12ff20
The address of refCC is: 0x12ff20
The value of m_cc in m_cInstance is: 1001
The address of m_cc in m_cInstance is: 0x12ff14
The address of m_cInstance is: 0x12ff14
Вот несколько замечаний:
Обратите внимание, что адрес m_cInstance в экземпляре AA отличается от адреса refCC.
Хотя экземпляр CC передается по ссылке (refCC) в конструкторе AA, переменная-член "m_cInstance" сама по себе является отдельным экземпляром.
Конструктор экземпляра для CC вызывается один раз, когда создается refCC, даже если в программе присутствуют два разных экземпляра CC, которые имеют одно и то же состояние.
Переопределенный оператор присваивания никогда не вызывается.
Мой вопрос прост:
Как создается m_cInstance в конструкторе AA без вызова конструктора CC или оператора присваивания, определенного в CC ??
А если CC содержит дескриптор файла на диске в качестве переменной-члена? Каково его поведение в "m_cInstance" ??
Спасибо
Де Косто.