С++ Конструкторы и деструкторы
Теперь нужно для класса задать конструктор (для выделения памяти) и деструктор(для освобождения памяти).
Код:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
class Komplecs{
int a,b;
public:
void Vvod();
void Slog();
void Umnog();
void Vich();
};
void Komplecs::Vvod()
{
cout<<"Введите действительную часть числа";
cout<<endl;
cin>>a;
cout<<"Введите мнимую часть числа";cout<<endl;
cin>>b;
cout<<endl;cout<<"Число равно ";
cout<< a<<"+i*"<< b;cout<<endl;
}
void Komplecs::Slog()
{int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";cout<<endl;
cin>>z;
a=(t+x);
b=(d+z);
cout<<"Сумма равна";
cout<<endl;
cout<< a<<"+i*"<< b; cout<<endl;
}
void Komplecs::Umnog()
{
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа"; cout<<endl;
cin>>z;
a=(t*x-d*z);
b=(t*z+d*x);
cout<<"При умножении число равно";cout<<endl;
cout<< a<<"+i*"<< b;cout<<endl;
}
void Komplecs::Vich()
{
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";cout<<endl;
cin>>z;
a=(t-x);
b=(d-z);
cout<<"При вычитании число равно";cout<<endl;
cout<< a<<"+i*"<< b;cout<<endl;
}
void main()
{
setlocale (LC_ALL, "Russian");
Komplecs c;int v;
v=1;
while(v!=0)
{
cout<<endl;
cout<<"1-Ввод числа";cout<<endl;
cout<<"2-Сложение чисел"; cout<<endl;
cout<<"3-Умножение чисел";cout<<endl;
cout<<"4-Вычитание чисел";cout<<endl;
cout<<"0-Выход";cout<<endl;
cin>>v;
if (v==1)
{
c.Vvod();
}
if (v==2)
{
c.Slog();
}
if (v==3)
{
c.Umnog();
}
if (v==4)
{
c.Vich();
}
} }
#include <stdlib.h>
#include <time.h>
using namespace std;
class Komplecs{
int a,b;
public:
void Vvod();
void Slog();
void Umnog();
void Vich();
};
void Komplecs::Vvod()
{
cout<<"Введите действительную часть числа";
cout<<endl;
cin>>a;
cout<<"Введите мнимую часть числа";cout<<endl;
cin>>b;
cout<<endl;cout<<"Число равно ";
cout<< a<<"+i*"<< b;cout<<endl;
}
void Komplecs::Slog()
{int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";cout<<endl;
cin>>z;
a=(t+x);
b=(d+z);
cout<<"Сумма равна";
cout<<endl;
cout<< a<<"+i*"<< b; cout<<endl;
}
void Komplecs::Umnog()
{
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа"; cout<<endl;
cin>>z;
a=(t*x-d*z);
b=(t*z+d*x);
cout<<"При умножении число равно";cout<<endl;
cout<< a<<"+i*"<< b;cout<<endl;
}
void Komplecs::Vich()
{
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";cout<<endl;
cin>>z;
a=(t-x);
b=(d-z);
cout<<"При вычитании число равно";cout<<endl;
cout<< a<<"+i*"<< b;cout<<endl;
}
void main()
{
setlocale (LC_ALL, "Russian");
Komplecs c;int v;
v=1;
while(v!=0)
{
cout<<endl;
cout<<"1-Ввод числа";cout<<endl;
cout<<"2-Сложение чисел"; cout<<endl;
cout<<"3-Умножение чисел";cout<<endl;
cout<<"4-Вычитание чисел";cout<<endl;
cout<<"0-Выход";cout<<endl;
cin>>v;
if (v==1)
{
c.Vvod();
}
if (v==2)
{
c.Slog();
}
if (v==3)
{
c.Umnog();
}
if (v==4)
{
c.Vich();
}
} }
P.S. То, что у вас сейчас получилось легко переделать в так-называемый класс-утилиту. Просто сделать все методы static и избавиться от a, b членов. Такая штука просто область видимости набора ф-ций ограничит классом. Обращение к ним будет classname::classfunction. Но, для таких вещей есть и другие решения. Но, вам-то "обычный" класс нужен (?), т.е. пользовательский тип со всеми атрибутами этого понятия.
Чтобы не пропадала работа, вот класс-утилита из вашего кода, может пригодится кому, если подобное зададут:
Код:
#include <iostream>
using namespace std;
class Komplecs {
public:
static void Vvod();
static void Slog();
static void Umnog();
static void Vich();
};
void Komplecs::Vvod() {
int a, b;
cout<<"Введите действительную часть числа";
cout<<endl;
cin>>a;
cout<<"Введите мнимую часть числа";
cout<<endl;
cin>>b;
cout<<endl;
cout<<"Число равно ";
cout<< a<<"+i*"<< b;
cout<<endl;
}
void Komplecs::Slog() {
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";
cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";
cout<<endl;
cin>>z;
cout<<"Сумма равна";
cout<<endl;
cout<< t+x <<"+i*"<< d+z;
cout<<endl;
}
void Komplecs::Umnog() {
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";
cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";
cout<<endl;
cin>>z;
cout<<"При умножении число равно";
cout<<endl;
cout<< t*x-d*z <<"+i*"<< t*z+d*x;
cout<<endl;
}
void Komplecs::Vich() {
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";
cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";
cout<<endl;
cin>>z;
cout<<"При вычитании число равно";
cout<<endl;
cout<< t-x<<"+i*"<< d-z;
cout<<endl;
}
int main() {
setlocale (LC_ALL, "Russian");
int v;
v=1;
while(v!=0) {
cout<<endl;
cout<<"1-Ввод числа";
cout<<endl;
cout<<"2-Сложение чисел";
cout<<endl;
cout<<"3-Умножение чисел";
cout<<endl;
cout<<"4-Вычитание чисел";
cout<<endl;
cout<<"0-Выход";
cout<<endl;
cin>>v;
if (v==1) {
Komplecs::Vvod();
}
if (v==2) {
Komplecs::Slog();
}
if (v==3) {
Komplecs::Umnog();
}
if (v==4) {
Komplecs::Vich();
}
}
}
using namespace std;
class Komplecs {
public:
static void Vvod();
static void Slog();
static void Umnog();
static void Vich();
};
void Komplecs::Vvod() {
int a, b;
cout<<"Введите действительную часть числа";
cout<<endl;
cin>>a;
cout<<"Введите мнимую часть числа";
cout<<endl;
cin>>b;
cout<<endl;
cout<<"Число равно ";
cout<< a<<"+i*"<< b;
cout<<endl;
}
void Komplecs::Slog() {
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";
cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";
cout<<endl;
cin>>z;
cout<<"Сумма равна";
cout<<endl;
cout<< t+x <<"+i*"<< d+z;
cout<<endl;
}
void Komplecs::Umnog() {
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";
cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";
cout<<endl;
cin>>z;
cout<<"При умножении число равно";
cout<<endl;
cout<< t*x-d*z <<"+i*"<< t*z+d*x;
cout<<endl;
}
void Komplecs::Vich() {
int t,d,x,z;
cout<<"Введите действительную часть первого числа";
cout<<endl;
cin>>t;
cout<<"Введите мнимую часть первого числа";
cout<<endl;
cin>>d;
cout<<endl;
cout<<"Введите действительную часть второго числа";
cout<<endl;
cin>>x;
cout<<"Введите мнимую часть второго числа";
cout<<endl;
cin>>z;
cout<<"При вычитании число равно";
cout<<endl;
cout<< t-x<<"+i*"<< d-z;
cout<<endl;
}
int main() {
setlocale (LC_ALL, "Russian");
int v;
v=1;
while(v!=0) {
cout<<endl;
cout<<"1-Ввод числа";
cout<<endl;
cout<<"2-Сложение чисел";
cout<<endl;
cout<<"3-Умножение чисел";
cout<<endl;
cout<<"4-Вычитание чисел";
cout<<endl;
cout<<"0-Выход";
cout<<endl;
cin>>v;
if (v==1) {
Komplecs::Vvod();
}
if (v==2) {
Komplecs::Slog();
}
if (v==3) {
Komplecs::Umnog();
}
if (v==4) {
Komplecs::Vich();
}
}
}
Поясню про static. Такие методы являются собственностью всего класса, а не отдельных объектов, создаются в единственном экземпляре на весь класс. К ним можно обращаться без создания экземпляра класса (не нужен объект). Для класса-утилиты это лучше, чем обращение по objectname.function. Можно вообще запретить создание объекта, поместив конструктор в private-секцию.
Код:
#include <iostream>
#include <sstream>
using namespace std;
class ComplexNumber {
int x, y;//действ. и мним. части соответ.
public:
ComplexNumber() : x(0), y(0) {} //нулевые значения re, im
ComplexNumber(int a, int b) : x(a), y(b) {} //заданные значения re, im
string toString(); //представление в виде строки
ComplexNumber operator+(const ComplexNumber&);
};
string ComplexNumber::toString() {
stringstream tmp;
int im_z = y;
const char *str = y<0? (im_z = -y, " - i*") : " + i*";
tmp << x << str << im_z;
return tmp.str();
}
ComplexNumber ComplexNumber::operator+ (const ComplexNumber& param) {
ComplexNumber temp;
temp.x = x + param.x;
temp.y = y + param.y;
return temp;
}
int main () {
ComplexNumber z1(-3,1), z2(1,-2), z = z1 + z2, z3;
cout << "z = " << z.toString() << endl;
cout << "z3 = " << z3.toString() << endl; //z3 = 0 + i*0
return 0;
}
#include <sstream>
using namespace std;
class ComplexNumber {
int x, y;//действ. и мним. части соответ.
public:
ComplexNumber() : x(0), y(0) {} //нулевые значения re, im
ComplexNumber(int a, int b) : x(a), y(b) {} //заданные значения re, im
string toString(); //представление в виде строки
ComplexNumber operator+(const ComplexNumber&);
};
string ComplexNumber::toString() {
stringstream tmp;
int im_z = y;
const char *str = y<0? (im_z = -y, " - i*") : " + i*";
tmp << x << str << im_z;
return tmp.str();
}
ComplexNumber ComplexNumber::operator+ (const ComplexNumber& param) {
ComplexNumber temp;
temp.x = x + param.x;
temp.y = y + param.y;
return temp;
}
int main () {
ComplexNumber z1(-3,1), z2(1,-2), z = z1 + z2, z3;
cout << "z = " << z.toString() << endl;
cout << "z3 = " << z3.toString() << endl; //z3 = 0 + i*0
return 0;
}