Есть еще одинспособ инициализации объекта с помощью списка инициализаторов данных объекта.
Этот список помещается при описании конструктора между списком параметров и телом конструктора:
<имя класса> (список параметров): < список инициализаторов>
{ тело конструктора }
Пример:
Class A
{ int ii; float ee; char cc;
Public: A(int i, float e, char c): ii (7),
ee(ii + i * e),
Cc(c)
{ }
...
};
A a(5, 1.2. ‘ f’); // создается объект с компонентами a.ii =7,
// a.ee = 13, a.cc=’f’
- Параметром конструктора не может быть его собственный класс, но
может быть ссылка на него.
- В классе может быть несколько конструкторов, но только один с
умалчиваемыми значениями параметров.
- Нельзя получить адрес конструктора.
- Если в определении класса нет конструктора, то компилятор автоматически предоставляет конструктор по умолчанию, который и создает неинициированный объект
<Имя класса> < имя объекта>;
Если есть хоть один конструктор с параметрами (но без значений по- умолчанию), для того чтобы иметь возможность создать неинициированный объект надо объявить в теле класса конструктор по умолчанию:
<Имя класса> () { };
тогда используя конструкцию
<Имя класса> < имя объекта>;
можно объявить неинициированный объект.
Примеры:
1.
… сlass Book {
public:
char title[40];
char author[20];
float price;
Book (char*atitle, char*aauthor, float aprice); // прототип
// конструктора
~Book(); // прототип деструктора
void show_book(void) { cout<<’\n’<< title<< “, “<<price;}
};
Book::Book(char*atitle, char*aauthor, float aprice)
{ strcpy(title, atitle); strcpy(author, aauthor);
price = aprice; }
Book::~Book()
{ cout <<’\n’<< “Уничтожение экземпляра:”<< title;}