Реализовать класс var — «Универсальная переменная» - C (СИ)
Формулировка задачи:
Задача
:Реализовать класс var - «Универсальная переменная». Объекты экземпляры этого класса способны хранить в себе значения следующих типов: int, double, String (строка – уже готовый класс).Проблема:
При сложении Строки с Числом возникает проблемам вывода информации.Как я понимаю проблема с деструктором то что он удаляет str а после пробует выводить информацию. Прошу вас помочь с решение задачи !!!#include <iostream>
#include <windows.h>
using namespace std;
class Var
{
private:
int num;
double real;
char *str;
public:
Var (int temp)
{
num=temp;
real=NULL;
str=NULL;
}
Var (double temp)
{
num=NULL;
real=temp;
str=NULL;
}
Var (char *temp)
{
num=NULL;
real=NULL;
str=new char [strlen(temp)+1];
strcpy(str,temp);
}
void Show ()
{
if (num!=NULL)
{
cout<<num<<endl;
}
if (real!=NULL)
{
cout<<real<<endl;
}
if (str!=NULL)
{
cout<<str<<endl;
}
}
const Var operator + (Var & temp)
{
//Если правая переменая типа INT
if (temp.num)
{
//Работает
if (num!=NULL)
{
return num + temp.num;
}
//Работает
if(real!=NULL)
{
return real + (double)temp.num;
}
if(str!=NULL)
{
char t[10];
itoa(temp.num,t,10);
char *tmp=new char [strlen(str)+ strlen(t)];
strcpy(tmp,str);
strcat(tmp,t);
return tmp;
}
}
}
Var (const Var & obj)
{
str=obj.str;
}
~Var()
{
delete []str;
}
};
void main ()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
Var a = 15;
Var b = "Hello";
Var c = 7.8;
Var d = "50";
d=b+a;
d.Show();
}Решение задачи: «Реализовать класс var — «Универсальная переменная»»
textual
Листинг программы
#include <iostream>
#include <windows.h>
using namespace std;
class Var
{
private:
int num;
double real;
char *str;
public:
Var (int temp)
{
num=temp;
real=NULL;
str=NULL;
}
Var (double temp)
{
num=NULL;
real=temp;
str=NULL;
}
Var (char *temp)
{
num=NULL;
real=NULL;
str=new char [strlen(temp)+1];
strcpy(str,temp);
}
void Show ()
{
if (num!=NULL)
{
cout<<num<<endl;
}
if (real!=NULL)
{
cout<<real<<endl;
}
if (str!=NULL)
{
cout<<str<<endl;
}
}
const Var operator + (Var & temp)
{
//Если правая переменая типа INT
if (temp.num)
{
//Работает
if (num!=NULL)
{
return num + temp.num;
}
//Работает
if(real!=NULL)
{
return real + (double)temp.num;
}
if(str!=NULL)
{
char t[10];
itoa(temp.num,t,10);
char *tmp=new char [strlen(str)+ strlen(t)];
strcpy(tmp,str);
strcat(tmp,t);
return tmp;
}
}
}
Var (const Var & obj)
{
str=new char [strlen(obj.str)+1];
strcpy(str,obj.str);
}
~Var()
{
delete []str;
}
const Var operator = (Var & temp)// перегрузка оператораа
{
return str = temp.str;
}
};
void main ()
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
Var a = 15;
Var b = "Hello";
Var c = 7.8;
Var d = "50";
b=b+a;
b.Show();
}
Объяснение кода листинга программы
- Объявляется класс Var с приватными переменными num, real и str.
- Конструктор класса Var создает объект класса Var из целого числа.
- Конструктор класса Var создает объект класса Var из числа с плавающей точкой.
- Конструктор класса Var создает объект класса Var из строки.
- Функция Show выводит на экран значения переменных num, real и str.
- Оператор + перегружен для выполнения сложения двух объектов Var.
- Конструктор класса Var создает объект класса Var из другого объекта класса Var.
- Деструктор класса Var освобождает память, выделенную для строки.
- Перегрузка оператора = позволяет присваивать один объект Var другому.
- В функции main создаются объекты Var a, b, c и d.
- Объект b присваивается значение объекта a.
- Выводится на экран значение объекта b.