- •Void Print();
- •Void print()
- •Void main()
- •Void print()
- •Void main()
- •Void main()
- •Void print()
- •Void main()
- •Void print()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void print();
- •Void Drob::print()
- •Void main()
- •Void main()
- •Void print();
- •Void Drob::print()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •Void main ()
- •Void main ()
- •Void main ()
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;
}
};