
- •1 Перегрузка функций
- •Шаблоны функций
- •Void main()
- •3 Класс — как расширенное понятие структуры
- •4 Конструкторы, деструкторы и доступность компонентов класса
- •Void main ( )
- •5 Компонентные данные
- •7 Указатель this
- •Void main()
- •8 Друзья классов
- •9 Перегрузка стандартных операций
- •Void main ()
- •10 Простое наследование
- •11 Виртуальные функции и абстрактные классы
- •12 Абстрактные классы
- •13 Множественное наследование
- •Void main()
3 Класс — как расширенное понятие структуры
Класс - это производный структурированный тип, введенный программистом на основе уже существующих типов. Класс задает некоторую структурированную совокупность типизированных данных и позволяет определить набор операций над этими данными.
Конструкция определения класса выглядит следующим образом:
ключ_класса имя_класса { список_компонентов};
ключ_класса - одно из служебных слов class, struct, union;
имя_класса - произвольно выбираемый идентификатор;
список_компонентов - определения и описания типизированных данных и принадлежащих классу функций.Компонентами класса могут быть данные, функции, классы, перечисления, дружественные функции, дружественные классы, имена типов и битовые поля. struct complex1 { double real; double imag;
void define (double re=0.0, double im=0.0)
{ real=re; imag=im; } void display (void)
{ cout<<“real=“<<real; cout<<“, imag=“<<imag; } };
После объявления класса можно определять и описывать объекты класса (экземпляры класса): complex1 x1, x2, D; complex1 *point=&D; complex1 dim[8];
complex1&Name=x2;
Итак, для описания объекта используется конструкция: имя_класса имя_объекта;
После определения объекта класса появляется возможность обращаться к его компонентам с помощью “квалифицированных имен”:
имя_объекта.имя_класса :: имя_компоненты.
Имя_класса с “::” (операцией уточнения области действия) может быть опущено: имя_объекта . имя_элемента;.
Уточненное имя, принадлежащей классу компонентной функции, имя_объекта.обращение_к_компонентной_функции обеспечивает вызов компонентной функции класса для обработки данных именно того объекта, имя которого использовалось в уточненном имени
x1.define ( ); x2.define ( 4.3, 20.0); x2.display ( ) - вывод на печать комплексного числа.
Другой доступ к элементам объекта некоторого класса предусматривает явное использование указателя на объект класса и операции косвеного выбора компоненты "->":
указатель_на_объект_класса -> имя_элемента;
Через указатель можно вызвать компонентную функцию
указатель_на_объект_класса->обращние_к_компонентной_функции
Статические компоненты класса не “дублируются” при создании объектов класса, каждый статический компонент существует в единственном экземпляре. Доступ к статическому компоненту возможен только после его инициализации. Для инициализации используется конструкция: тип имя_класса : : имя_компоненты инициализатор;
# include<iostream.h> struct goods { char name[40];
float price; static int percent; void Input ( )
{ cout<<“Наименование товара:”;
cin>>name; cout<<“Закупочная цена:”; cin>>price; }
void Display ( ) {cout<<“\n”<<name;
cout<<“,розничная цена:”<<lond(price*(1.0+goods:: percent *0.01)); }};
int goods : : percent=12; - это предложение должно быть размещено в глобальной области после определения класса. Только при инициализации статический компонент класса получает память и становится доступным имя_класса::имя_компоненты;
имя_объекта.имя_класса::имя_компоненты; имя_объекта . имя_компоненты.