Форум программистов, компьютерный форум CyberForum.ru

Перегрузка операторов и абстрактный класс - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Скип-список http://www.cyberforum.ru/cpp-beginners/thread970941.html
не получается исправить ошибку. Кто знает решение? /* skip list */ #include <stdio.h> #include <stdlib.h> /* define data-type and compare operators here */ typedef int T; /* type of item to be stored */ #define compLT(a,b) (a < b) #define compEQ(a,b) (a == b)
C++ Задача на циклы. Дано натуральное n. Вычислить Добрый всем день! Необходима помощь с решением этого цикла: Дано натуральное n. Вычислить: 1/22 + 1/42 + ... + 1/(2n) n . http://www.cyberforum.ru/cpp-beginners/thread970935.html
Как из программы считать данные с сайта? C++
К примеру: при запуске программы нужно получить данные с сайта прогноза погоды(допустим влажность,давление,ветер).Как это сделать?Есть какие-либо функции?
Перевод с Pascal на C++ C++
Помогите с программой нужно переделать ее на C ++ builder Program F_An; uses CRT; type complex = record re, im: real; end; type Opis_comp = record nam:char;a,b:integer; par: real; end; const n=2; Ninp=1; Nout=2; Nf=21; f1=0.01; f2=100; Zapis: array of Opis_comp= ((nam: 'R'; a:1; b:2; par:1),
C++ IntelliSense: требуется выражение http://www.cyberforum.ru/cpp-beginners/thread970912.html
Подскажите, почему выдает ошибку? Объявление textColor: SDL_Color textColor;
C++ Ошибка при наследовании класса Всем доброго времени суток, пытаюсь отнаследовать класс, вот такой код я смастерил: #ifndef CLASS_H_ #define CLASS_H_ class stack { protected: int *turn; int count, size; public: подробнее

Показать сообщение отдельно
Oberyn Martell
5 / 5 / 0
Регистрация: 15.05.2013
Сообщений: 36
18.10.2013, 20:37  [ТС]     Перегрузка операторов и абстрактный класс
Цитата Сообщение от Веолета Посмотреть сообщение
Помогите решить задачу.

программу, демонстрирующую работу с объектами двух типов: SymbString(символьная строка) и DecString(десятичная строка), для чего создать систему соответсвующих классов. Каждый объект должен иметь идентификатор(в виде произвольной строки символов)и одно или несколько полей для хранения состояния объекта(один класс является потомков другого).
Клиенту(функции main)должны быть доступны следующие основные операции(методы): создать объект, удалить объект, показать значение объекта, выполнение операции operator +(T s1, T s2), где Т - это либо SymbString, либо DecString. Операции по созданию и удалению объектов инкапсулировать в классе Factory. Предусмотреть меню, позволяющее продемонстрировать заданные операции.
При необходимости в разрабатываемые классы добавляются дополнительные методы(например, конструктор копирования, операция присваивания и т.п)для обеспечения надлежащего функционирования этих классов.

operator +(T s1, T s2)
//для объектов SymbString - конкатенация строк s1 и s2;
//для объектов прочих классов - сложение соответсвующих численных значений с последующим преобразованием к типу Т
SymbString.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <string>
#include "AString.h"
 
class SymbString: public AString {
    std::string name;
    std::string val;
    char tip;
public:
    SymbString (std::string _name) : name(_name), tip('s') {}
    SymbString (std::string _name, std::string _val) : name(_name), val(_val), tip('s') {}
    const std::string& GetName() const { return name; }
    const std::string& GetVal() const { return val; }
    const char& GetTip() const { return tip; }
    int GetSize() const { return val.size(); }
    void SetVal(std::string _val) { val = _val; }
    SymbString (SymbString& pObj);
    SymbString& operator= (SymbString& pObj);
    SymbString operator+ (SymbString& pObj);
};
SymbString.cpp :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "SymbString.h"
#include <iostream>
#include <string>
 
using namespace std;
 
SymbString::SymbString (SymbString& pObj) {
    name = pObj.name;
    val = pObj.val;
    tip = pObj.tip;
}
 
SymbString& SymbString::operator= (SymbString& pObj) {
    name = pObj.GetName();
    val = pObj.GetVal();
    tip = pObj.GetTip();
    return *this;
}
 
SymbString SymbString::operator+ (SymbString& pObj) {
    string _val = val + pObj.GetVal();
    SymbString pObj3 ("Otvet", _val);
    return pObj3;
}
DecString.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <string>
#include "AString.h"
 
const std::string alph = "0123456789";
bool IsDecStrVal(std::string);
 
class DecString : public AString {
    std::string name;
    std::string val;
    char tip;
public:
    DecString(std::string _name): name(_name), tip('d') {}
    DecString(std::string _name, std::string);
    const std::string& GetName() const { return name; }
    const std::string& GetVal() const { return val; }
    const char& GetTip() const { return tip; }
    void SetVal(std::string _val) { val = _val; }
    int GetSize() const { return sizeof(val); }
    DecString (DecString& pObj);
    DecString& operator= (DecString& pObj);
    DecString operator+ (DecString& pObj);
};
DecString.cpp :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "DecString.h"
#include <iostream>
#include <string>
#include <sstream>
 
using namespace std;
 
bool IsDecStrVal(string _str) {
    for (int i = 0; i < _str.size(); ++i)
        if (-1 == alph.find_first_of(_str[i]))
            return false;
    return true;
}
 
DecString::DecString(string _name, string _val) :
    name(_name), tip('d') {
        if (IsDecStrVal(_val))
            val = _val;
}
 
DecString::DecString (DecString& pObj) {
    name = pObj.name;
    val = pObj.val;
    tip = pObj.tip;
}
 
DecString& DecString::operator= (DecString& pObj) {
    name = pObj.GetName();
    val = pObj.GetVal();
    tip = pObj.GetTip();
    return *this;
}
 
DecString DecString::operator+ (DecString& pObj) {
    long int n1 = atol(pObj.GetVal().c_str());
    long int n2 = atol(val.c_str());
    string _name = "Otvet";
    DecString pObj3(_name);
    long int n3 = n2 + n1;
    stringstream ss;
    ss << n3;
    string _val;
    ss >> _val;
    pObj3.SetVal(_val);
    return pObj3;
}
Summa.h :
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include "Action.h"
#include <string>
 
class Summa : public Action {
    std::string name;
public:
    Summa() : name("Сумма двух элементов") {}
    void Operate(AString*);
    const std::string& GetName() const { return name; }
};
 
extern Summa summa;
Summa.cpp :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include "Summa.h"
#include "Factory.h"
#include "Menu.h"
#include "ShowOct.h"
#include "ShowStr.h"
#include <iostream>
#include <string>
#include <stdlib.h>
#include "SymbString.h"
#include "OctString.h"
 
using namespace std;
 
Action* pActs1[] = { &summa };
vector<Action*> actionList1(pActs1, pActs1 + sizeof(pActs1)/sizeof(Action*));
 
void Summa::Operate(AString* pObj1) {
    Menu menu1(actionList1);
    AString* pObj2 = menu1.SelectObject(factory);
    if (dynamic_cast<DecString*>(pObj2) && dynamic_cast<DecString*>(pObj1)) {
        DecString _pObj2 (pObj2->GetName(), pObj2->GetVal());
        DecString _pObj1 (pObj1->GetName(), pObj1->GetVal());
        DecString pObj3 = _pObj1 + _pObj2;
        cout << pObj1->GetVal() << " + " << pObj2->GetVal() << " = " << pObj3.GetVal() << endl;
        return;
    }
    if (dynamic_cast<SymbString*>(pObj2) && dynamic_cast<SymbString*>(pObj1)) {
        SymbString _pObj2 (pObj2->GetName(), pObj2->GetVal());
        SymbString _pObj1 (pObj1->GetName(), pObj1->GetVal());
        SymbString pObj3 = _pObj1 + _pObj2;
        cout << pObj1->GetVal() << " + " << pObj2->GetVal() << " = " << pObj3.GetVal() << endl;
        return;
    }
    else
        cout << "Невозможно выполнить операцию (несовместимые типы)" << endl;
}
 
Summa summa;
 
Текущее время: 01:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru