Реализовать класс 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д