/* Инициализируем члены numA и numB в конструкторе myclass(), используя обычный синтаксис. */
myclass(int х, int у) { numA = х; numA = y;}
int getNumA() { return numA; }
int getNumB() { return numB; }
};
int main()
{
myclass ob1(7, 9), ob2 (5, 2);
cout << "Значения членов данных объекта ob1 равны " << ob1.getNumB() << " и " << ob1.getNumA() << endl;
cout << "Значения членов данных объекта ob2 равны " << ob2.getNumB() << " и " << ob2.getNumA() << endl;
return 0;
}
Результаты выполнения этой программы таковы.
Значения членов данных объекта ob1 равны 9 и 7
Значения членов данных объекта ob2 равны 2 и 5
Присвоение начальных значений членам данных
class myclass {
const int numA; // const-член
const int numB; // const-член
};
то им нельзя было бы присвоить значения с помощью конструктора класса
Синтаксис инициализации членов класса аналогичен тому, который используется для вызова конструктора базового класса. Вот как выглядит общий формат такой инициализации.
constructor(список_аргументов):
член1(инициализатор),
член2(инициализатор),
// ...
членN (инициализатор)
{
// тело конструктора
}
Члены, подлежащие инициализации, указываются после конструктора класса, и отделяются от имени конструктора и списка его аргументов двоеточием. При этом в одном и том же списке можно смешивать обращения к конструкторам базового класса с инициализацией членов.
Ниже представлена предыдущая программа, но переделанная так, чтобы члены
#include
using namespace std;
class myclass {
const int numA; // const-член
const int numB; // const-член
public:
/* Инициализируем члены numA и numB с использованием альтернативного синтаксиса инициализации. */
myclass(int х, int у) : numA(x), numB(y) { }
int getNumA() { return numA; }
int getNumB() { return numB; }
};
int main()
{
myclass ob1 (7, 9), ob2(5, 2);
cout << "Значения членов данных объекта ob1 равны " << ob1.getNumB() << " и " << ob1.getNumA()<< endl;
cout << "Значения членов данных объекта ob2 равны " << ob2.getNumB() << " и " << ob2.getNumA()<< endl;
return 0;
}
Эта программа генерирует такие же результаты, как и ее предыдущая версия. Однако обратите внимание на то, как инициализированы члены
myclass(int х, int у) : numA(x), numB(у) { }
Здесь член