Реализовать класс 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();
}

Объяснение кода листинга программы

  1. Объявляется класс Var с приватными переменными num, real и str.
  2. Конструктор класса Var создает объект класса Var из целого числа.
  3. Конструктор класса Var создает объект класса Var из числа с плавающей точкой.
  4. Конструктор класса Var создает объект класса Var из строки.
  5. Функция Show выводит на экран значения переменных num, real и str.
  6. Оператор + перегружен для выполнения сложения двух объектов Var.
  7. Конструктор класса Var создает объект класса Var из другого объекта класса Var.
  8. Деструктор класса Var освобождает память, выделенную для строки.
  9. Перегрузка оператора = позволяет присваивать один объект Var другому.
  10. В функции main создаются объекты Var a, b, c и d.
  11. Объект b присваивается значение объекта a.
  12. Выводится на экран значение объекта b.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы