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

Структуры и определение операторов для работы с ними - C++

Восстановить пароль Регистрация
 
Shtirliz72
200 / 160 / 38
Регистрация: 25.10.2013
Сообщений: 527
26.10.2013, 08:56     Структуры и определение операторов для работы с ними #1
Есть отдельный файл с базовыми структурами, которые используются во всём проекте. Есть файл с классом, в котором используется собственная структура, забивающая часть изначальных данных в остальные структуры. Внутри проекта происходят преобразования из внутренней структуры во внешние с помощью operator=. Однако сам operator= прописать в классе не удаётся. Как и можно ли это реализовать не ломая структуру проекта?
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
//------structs.h-------
struct A {
    QString str;
    int number;
};
 
struct B {
    QString str;
    double fnumber;
};
 
//------myclass.h-------
#include "structs.h"
 
class MyClass
{
    struct C {
        QString str;
        int number;
        double fnumber;
    };
    // сюда хотел вставить объявление операторов, но, увы никак не получилось
public:
    A funcA();
    
private;
    B funcB();
    C funcC();
};
 
//------myclass.cpp-------
A MyClass::funcA()
{
    A a;
    a = funcC();
    return a;
}
 
B MyClass::funcB()
{
    B b;
    b = funcC();
    return b;
}
 
C MyClass::funcC()
{
    C c;;
    // do something
    return c;
}
 
//---Операторы преобразования---
A& A::operator=(const C &from)
{
    str = from.str;
    num = from.num;
    return *this;
}
 
B& B::operator=(const C &from)
{
    str = from.str;
    fnum = from.fnum;
    return *this;
}
И ещё есть вопрос по реализации функции для контейнера, хранящего структуры. Возможно ли сделать поиск в таком виде? Или его надо делать как-то по другому? Очень не охото делать данную функцию поиска в отрыве от контейнера.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
struct A {
    QString name;
    int number;
};
typedef QVector<A> As;
 
//вызов функции поиска где-то в проекте
void SomeClass:someFunction()
{
    As as;
    A *a = as.search("Name");
}
 
//собственно функция поиска
A* As::search(const String &name)
{
    iterator = end();
    for (iterator i = begin; i != end; ++i)
        if (!i->name.compare(name))
            return i; // Или же здесь лучше return &(*i)?
}
Добавлено через 16 часов 24 минуты
Ладно, народ мучать больше не буду. Вопросы снимаются.
Первый вопрос решил через создание в приватной структуре(которая в классе) перегруженной функции забивания данных в другие структуры. Хоть теперь код и не выглядит так красиво, но сойдёт. Плюс написал там оператор преобразования (operator T() {}) к другим структурам.
Второй вопрос решил простым созданием класса, наследующим QVector<A>. Хотя всё же интересно можно ли было обойтись без этого.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2013, 08:56     Структуры и определение операторов для работы с ними
Посмотрите здесь:

Определение класса для работы с одномерным динамическим массивом C++
Структуры Си. Написать программу ввода координат двух точек и вычисления расстояния между ними C++
классы,определение операторов C++
Структуры и всё связаное с ними C++
Структуры данных для хранения и работы с матрицами C++
C++ Реализуйте интерфейс динамической структуры list для работы с объектами класса А
Бинарные деревья и алгоритмы работы с ними C++
Перегрузка операторов для работы со стеком C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 01:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru