
- •Классы и объекты
- •Введение
- •Лабораторная работа № 1. Структура-пара
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •XXX yyy; // скалярная переменная
- •Vl, v2[20]; // скалярная переменная и массив
- •Int _tmain(int argc, _tchar* argv[])
- •X.Read();
- •X.Display(); // вывод полей на экран
- •Лабораторная работа № 2. Структуры и классы
- •Выполнение лабораторной работы
- •Методические указания к выполнению лабораторной работы
- •Int getDigitByPosition(p_number V,int pos) {
- •Int transferTo10(p_number V) {
- •Int p_number_class::getDigitByPosition(int pos) {
- •Int p_number_class::transferTo10() {
- •Void p_number_class::transferFrom10(int numb) {
- •Int main(int argc, char* argv[])
- •Библиографический список
XXX yyy; // скалярная переменная
Library L[10], *pl; // массив и указатель
class Class { /*... */ } // определение класса
Vl, v2[20]; // скалярная переменная и массив
Переменным vl и v2 присваивается тип Class, после чего для объявления других переменных достаточно указания типа Class, например:
Class v3, v4[10];
Переменную можно инициализировать другой переменной того же класса. Разрешается объявлять и ссылки на объекты с обязательной инициализацией.
Money х = t; // инициализация переменной
date y(d); // инициализация переменной
date &u = у; // обязательная инициализация ссылки
Если поля открыты, разрешается обычная инициализация полей инициализатором структуры, например:
class Person
{ public: string Fio; double Summa; };
Person Kupaev = { "Купаев М.", 10000.00 };
Указатели могут быть инициализированы так же, как и указатели на переменные встроенных типов:
Money *pt = new Money,*pp = pt,*ps; // обьявление указателей
ps = new Money; // и создание объектов
date *pd = new date(), *pr; // обьявление указателей
pr = new date(); // и создание объектов
Форма со скобками после типа выполняет обнуление полей динамического объекта.
Объекты класса разрешается определять в качестве полей другого класса:
class Count
{ Money Summa; // сумма на счете
unsigned long NumberCount; // номер счета
date D; // дата открытия счета
public:
void Display(); // вывод на экран
};
Использование объекта в качестве поля другого класса называется композицией.
Объекты класса можно передавать в качестве аргументов любыми способами (по значению, по ссылке, по указателю) и получать как результат из функции:
Money AddMoney(const Money &a, const Money &b); // по константной ссылке
Money Init(const long double &r); // возврат значения
void f1(date t); // по значению
void f2(date &t); //по ссылке
void f3(date *t): // по указателю
Функция, возвращающая объект класса, может быть использована для инициализации переменной класса:
Money t = Init(200,56); Money r = AddMoney(x,y);
Можно объявлять объекты-константы класса с обязательной инициализацией:
const Money k = р;
const date d(t);
const Money t = Init(200,50);
Доступ к открытым полям выполняется обычными для структуры способами:
объект.поле
указатель->поле
Вызов открытых методов осуществляется аналогично
объект.метод(параметры)
указатель->метод(параметры)
Для массива объектов обращение к открытому полю выполняется так:
имя_массива[индекс].поле
Аналогично выполняется и вызов метода для элемента массива
имя_массива[индекс].метод(аргументы)
Примеры
date d;
d.day = 21; d.month = 11; d.year = 2006;
d.print();
d.set(22,2,1953);
date DD[3]; DD[0].day = 12;
DD[0].next();
Library t;
int a = t.function(5);
Library *pt = new Library;
int b = pt->function(5);
Count A[5]; // обьявление массива
for(int i = 0; 1 < 5; i++)
A[i].Display(); // вывод элементов массива
Создаём для задания внешнюю функцию с именем make_mun(), где mun – тип реализуемой структуры. Эта функция получает в качестве аргументов значения для полей структуры и возвращает структуру требуемого типа.
Para make_para(int a, int b) {
Para c;
c.first = a;
c.second = b;
return c;
}
Для демонстрации созданного типа в методе main() объявляем переменные и вызываем методы.