
- •1. Объектно-ориентированное программирование как методология проектирования программных средств.
- •1.2. Объект
- •Iarray a(10), b(25), c(45);
- •Int main(void)
- •2.1. Перегрузка имен функций
- •Int print(int);
- •Void print(int);
- •Int (*matrix)[10];
- •Void main(void)
- •Void incr(int &aa)
- •3.2 Объявление класса.
- •Имя_класса имя объекта;
- •Имя объекта. Имя элемента
- •Имя_объекта. Имя_метода( );
- •Имя класса *this;
- •Имя_класса (список формальных параметров)
- •Листинг 3.4
- •V_3d( double &X, double &y,double &z)
- •Void main(void)
- •Х:: х(const х&)
- •V_3d::v_3d(const v_3d& v1)
- •Void v_3d::print()
- •Сlass X
- •Void main (void)
- •4. Перегрузка операций
- •V_3d(double x1,double y1,double z1)
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.1. Использование дружественных функций при перегрузке операций
- •Void print();
- •Void main(void)
- •Void v_3d::print()
- •4.3.2.Особенности использования дружественных функций
- •Имя объекта. Имя_функции
- •Void f1( X& );
- •Void f2 ( X* );
- •Void main(void)
- •5. Производные классы
- •Int Bfunc( );
- •Int Xfunc( );
- •Int Efunc( X & x1 );
- •Istream
- •Iostream
- •Ifstream
- •С помощью манипуляторов – специальных операций, вставляемых непосредственно в поток вывода.
- •Int width( int w);
- •Int precision( int p);
- •Void main(void)
- •Void open(char* filename, int mode, int access);
- •If(!fout) {
- •7. Виртуальные функции
- •Circle a;
- •A.Build();
- •Virtual double a(double X)
- •Void main (void)
- •Void Graphics Object :: Build() { };
- •8.Шаблоны функций и классов
- •Void main(void)
- •Void Swap ( SwapType &X, SwapType &y)
- •Void main(void)
- •Int a, double b;
- •Int sloc,rloc;//начало и конец очереди
- •Void qput(t I); // помещение элемента в очередь
- •Int main(void)
- •1.Какой принцип ооп реализуется с помощью шаблонных функций и классов?
- •2.Когда целесообразно использовать шаблоны функций? Каков общий вид объявления шаблона функции?
Имя_класса (список формальных параметров)
{ операторы тела конструктора };
Такой конструктор называется конструктором, получающим параметры. Пример программы, в которой использован такой конструктор, приведен в листинге 3.4.
Листинг 3.4
#include <iostream.h>
#include <math.h>
// Объявление класса “трехмерный вектор”
class V_3d
{
double x;
double y;
double z;
public:
// конструктор получает три параметра – ссылки на
//данные типа double
// определение конструктора находится внутри класса
V_3d( double &X, double &y,double &z)
{ x=X; y=Y; z=Z; };
//объявление функции – метода класса
double mod();
};
Void main(void)
{
// Создание объекта R класса V_3d с инициализацией элементов-
// данных значениями переданных конструктору параметров
V_3d R(1.0,2.0,3.0);// неявный вызов конструктора
double a;
a=R.mod();
cout << "\n длина вектора =" << a;
}
//определение функции – метода класса
double V_3d :: mod()
{
return sqrt(x*x+y*y+z*z);
}
Конструкторы могут иметь аргументы по умолчанию. Например, конструктор
V_3d :: V_3d(double, double, double =7.6)
может принимать два или три аргумента. Если данный конструктор при инициализации объекта будет представлен с двумя аргументами, недостающий третий аргумент будет принят как значение типа double, равное 7.6. Аналогично конструктор
V_3d :: V_3d(double=5.5, double=6.3, double =7.6)
может принимать один, два или три аргумента, либо не принимать аргументов вообще, причем в каждом случае принимаются соответствующие умолчания.
Конструктор по умолчанию. Конструктором по умолчанию для класса Х называется такой конструктор, который не принимает никаких аргументов: X::X(). Например:
V_3d () { x=0; y=0; z=0; };
Примечание
. Конструктор по умолчанию не принимает аргументов вообще, его не следует путать с конструктором, имеющим аргументы по умолчанию.
Конструктор копирования. Конструктор копирования для класса . Х - это такой конструктор, который может быть вызван с единственным аргументом типа Х:
Х:: х(const х&)
Конструктор копирования запускается при копировании объекта данного класса, обычно в случае объявления с инициализацией объектом другого класса: Х x = y.
Если конструкторы в теле класса не были определены явно, то компилятор формирует по умолчанию конструктор без параметров и конструктор копирования.
3.8. Перегрузка конструкторов
В определении класса может присутствовать несколько конструкторов, т.е. конструкторы могут быть перегружены. Перегруженные конструкторы позволяют создавать объекты в зависимости от значений, используемых при инициализации.
Перегрузка конструкторов иллюстрирует такой принцип ООП, как полиморфизм, что означает наличие в пределах одного класса нескольких функций с одним и тем же именем.
В листинге 3.5 приведен пример программы, в которой используются перегруженные конструкторы.
Листинг 3.5. Перегрузка конструкторов
#include <iostream.h>
#include <math.h>
class V_3d
{
double x,y,z;
public:
//конструктор по умолчанию
V_3d() {x=0;y=0;z=0;};
//конструктор, принимающий параметры
V_3d(double x1,double y1,double z1)
{
x=x1;
y=y1;
z=z1;
};
//конструктор копирования
V_3d(const V_3d& V1);
// функция вычисления модуля
double mod()
{
return sqrt(x*x+y+y+z*z);
};
// функция для вывода элементов – данных класса
void print();
};
void main(void)
{
double a;
//создание объекта B класса V_3d
V_3d B; //запуск конструктора по умолчанию
cout << "координаты вектора B:\n";
B.print(); // вызов функции – метода класса
//создание обьекта R класса V_3d
V_3d R(1.0,2.0,3.0) ; //используется конструктор с параметрами
cout << "координаты вектора R:\n";
R.print();
a=R.mod(); //вызов метода класса
cout << "\n длина вектора R = " << a <<"\n";
V_3d C=R; // запуск конструктора копирования для объекта C
cout << "\nкоординаты вектора C:\n";
C.print();
}
//определение конструктора копирования