4. Какова разница между открытыми (public) и закрытыми (private) данными- членами?
К открытым переменным-членам могут обращаться клиенты класса, а к закрытым могут получить доступ только функции-члены класса.
5. Могут ли функции-члены быть закрытыми?
Да. Как функции-члены, так и переменные-члены могут быть закрытыми.
6. Могут ли переменные-члены быть открытыми?
Хотя переменные-члены могут быть открытыми, но считается хорошей практикой программирования, когда переменные-члены объявляются все же закрытыми, а доступ к этим данным обеспечивается за счет открытых методов доступа.
7. Если объявить два объекта класса Cat, могут ли они иметь различные значения своих переменных-членов itsAge?
Да. Каждый объект класса имеет свои собственные переменные-члены.
8. Ну5кно ли объявления класса завершать точкой с запятой? А определения методов класса?
Объявления класса заканчиваются точкой с запятой после закрывающей фигурной скобки, а определения функций-членов — нет.
9. Как бы выглядел заголовок функции-члена Meow класса Cat, которая не принимает никаких параметров и возвращает значение типа void?
Заголовок функции-члена Meow() класса Cat, которая не принимает параметров и возвращает значение типа void, должен иметь следующий вид:
void Cat::Meow()
10. Какая функция вызывается для выполнения инициализации класса? Для инициализации класса вызывается конструктор.
1. Напишите программу, которая объявляет класс с именем Employee (Служащие) с такими переменными-членами: age (возраст), yearsOfService (стаж работы) и Salary (зарплата).
class Employee
{
int Age;
int YearsOfService;
int Salary;
};
2. Перепишите класс Employee, чтобы сделать данные-члены закрытыми и обеспечить открытые методы доступа для чтения и установки всех данных-членов.
class Employee
{
public:
int GetAge() const;
void SetAge(int age);
int GetYearsOfService() const;
void SetYearsOfService(int years);
int GetSalary() const;
void SetSalary(int salary);
private:
int Age;
int YearsOfService;
int Salary;
};
3. Напишите программу с использованием класса Employee, которая создает два объекта класса Employee; устанавливает данные-члены age, YearsOfService и Salary, а затем выводит их значения.
int main()
{
Employee John;
Employee Sally;
John.SetAge(30);
John.SetYearsOfService(5);
John.SetSalary(50000);
Sally.SetAge(32);
Sally.SetYearsOfService(8);
Sally.SetSalary(40000);
cout << "At AcmeSexist company, John and Sally have the same job.\n";
cout << "John is " << John.GetAge() << " years old and he has been with";
cout << "the firm for " << John.GetYearsOfService << " years.\n";
cout << "John earns $" << John.GetSalary << " dollars per year.\n\n";
cout << "Sally, on the other hand is " << Sally.GetAge() << " years old and has";
cout << "been with the company " << Sally.GetYearsOfService;
cout << " years. Yet Sally only makes $" << Sally.GetSalary();
cout << " dollars per year! Something here is unfair.";
return 0;
}
4. На основе программы из упражнения 3 создайте метод класса Employee, который сообщает, сколько тысяч долларов зарабатывает служащий, округляя ответ до 1 000 долларов.
float Employee:GetRoundedThousands() const
{
return (Salary+500) / 1000;
}
5. Измените класс Employee так, чтобы можно было инициализировать данные-члены
age, YearsOfService и Salary в процессе "создания" служащего.
class Employee
{
public:
Employee(int Age, int yearsOfService, int salary);
int GetAge() const;
void SetAge(int Age);
int GetYearsOfService() const;
void SetYearsOfService(int years);
int GetSalary() const;
void SetSalary(int salary);
private:
int Age;
int YearsOfService;
int Salary;
};
6. Жучки: что неправильно в следующем объявлении?
class Square
{
public:
int Side;
}
Объявления классов должны завершаться точкой с запятой.
7. Жучки: что весьма полезное отсутствует в следующем объявлении класса?
class Cat
{
int GetAge() const;
private:
int itsAge;
};
Метод доступа к данным GetAge() является закрытым по умолчанию. Помните: все члены класса считаются закрытыми, если не оговорено иначе.
8. Жучки: какие три ошибки обнаружит компилятор в этом коде?
class TV
{
public:
void SetStation(int Station);
int GetStation() const;
private:
int itsStation;
};
main()
{
TV myTV;
myTV.itsStation = 9;
TV.SetStation(10);
TV myOtherTv(2);
}
Нельзя обращаться к переменной itsStation непосредственно. Это закрытая пере- менная-член.
Нельзя вызывать функцию-член SetStation()npHMO в классе. Метод SetStation() можно вызывать только для объекта.
Нельзя инициализировать переменную-член itsStation, поскольку в программе не определен нужный для этого конструктор.
1. Можно ли в цикле for инициализировать сразу несколько переменных-счетчиков?
Можно, для этого в строке инициализации их следует разделить запятыми, например:
for <���х = 0. у = 10; х < 100; х++, у++)
2. Почему следует избегать использование оператора goto?
Читать дальше