Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП.doc
Скачиваний:
2
Добавлен:
14.07.2019
Размер:
399.36 Кб
Скачать

Void print();

operator int()

{

return ch/zn;

}

operator double()

{

return ch/zn;

}

friend ostream& operator<<(ostream &stream, const Drob& obj)

{

stream<<obj.ch<<"/"<<obj.zn<<endl;

return stream;

}

friend istream& operator>>(istream &stream, Drob& obj)

{

cout<<"Vvedite chislitel' : ";

stream>>obj.ch;

cout<<"Vvedite znamenatel' : ";

stream>>obj.zn;

return stream;

}

};

void Drob::SetCh(int c)

{

ch = c;

}

void Drob::SetZn(int z)

{

if(z == 0)

{

cout<<"Error!!!!!\n";

zn = 1;

}

else

zn = z;

}

int Drob::GetCh()

{

return ch;

}

int Drob::GetZn()

{

return zn;

}

int Drob::InputCh()

{

cout<<"Vedite chislitel' - ";

cin>>ch;

return ch;

}

int Drob::InputZn()

{

cout<<"Vedite znamenatel' - ";

cin>>zn;

if (zn == 0)

{

cout<<"V znamenatetle ne mojet but' nol'!"<<endl;

zn = 1;

}

return zn;

}

Void Drob::print()

{

cout<< ch << "/" << zn << "\n";

}

Void main()

{

Drob d;

cin>>d;

cout<<d;

}

СТАТИЧЕСКИЕ ПОЛЯ КЛАССА

Статические поля – это поле , которое является общим для всех экземпляров класса.

Такие поля создаются с помощью ключевого слова static .

Class имя класса

{

Static тип имя поля;

} ;

На самом деле объявление класса само по себе место в памяти не занимает .

Память будет выделена только при объявлении объектов нашего класса .

При объявлении объектов создаются , те поля , которые дублируются в каждом из них .

А статическое поле одно – на все объекты этого класса .

Для того чтобы выделить память для статического поля его определение выносится за пределы класса .

Поскольку статическое поле не связано с созданием экземпляров класса , то для того чтобы им воспользоваться – создавать эти экземпляры вовсе не нужно .

#include<iostream>

using namespace std;

class MyClass

{

private:

int f1;

int f2;

public:

static int static_f;

......

};

int MyClass::static_f=0;

Void main()

{

MyClass::static_f++;//первый способ

MyClass obj;

obj.static_f++;//второй способ

}

#include<iostream>

using namespace std;

class MyClass

{

public:

static int CreateObjects;

static int LiveObjects;

MyClass()

{

CreateObjects++;

LiveObjects++;

}

~MyClass()

{

LiveObjects--;

}

};

int MyClass::CreateObjects=0;

int MyClass::LiveObjects=0;

Void main()

{

MyClass obj1,obj2,obj3;

{

MyClass obj4;

}

cout<<"Create objects = "<<MyClass::CreateObjects<<endl;

cout<<"Live objects = "<<MyClass::LiveObjects<<endl;

}

СТАТИЧЕСКИЕ МЕТОДЫ КЛАССА

Статический метод класса – это функция которая не работает непосредственно с экземпляром класса , но логически связана с этим классом .

Синтаксис:

1)Class имя класса

{

…..

Static тип имя функции (параметры)

{

Тело

}

…..

};

2)Class имя класса

{

….

Static тип имя функции (параметры);

….

};

Тип MyClass::имя_функции(параметры)

{

тело

}

Поскольку статический метод не связан с созданием экземпляров класса , то для того чтобы воспользоваться им создавать его не нужно .

Поскольку статический метод не связан с экземпляром класса , то они не получают неявный указатель this . Следовательно внутри статических методов нельзя напрямую обращаться к полям класса .

#include<iostream>

using namespace std;

class MyClass

{

public:

static void StaticMethod()

{

cout<<"MyClass::StaticMethod()"<<endl;

}

};

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]