Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
smallup
0 / 0 / 0
Регистрация: 25.05.2015
Сообщений: 19
1

Объект другого класса в классе

30.11.2015, 16:11. Просмотров 400. Ответов 0
Метки нет (Все метки)

Здравствуйте. У меня есть класс Subdivision с методами get и set. И есть класс Worker, в котором есть объект класса Subdivision. В Worker тоже есть методы get и set. Так вот, проблема в том, что когда в Worker ввожу и вывожу значения, то потом выводится там, где ввел поле класса Subdivision,"CDCDCD",а не то, что я ввел. Мне кажется, что это из-за неправильных методов get и set в Worker, поскольку он возвращает просто указатель. Можете подсказать, как исправить эту ошибку ?
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
#include "stdafx.h"
class SUBDIVISIONDLL_API Subdivision
{
private:
    string subdivisionName;
    string surnameBoss;
    double prize;
    string positionsAtSubdiv;
public:
    Subdivision();
    Subdivision(string subName, string surnameBossNM, double prizeNM, string posAtSub);
 
    ~Subdivision();
    Subdivision Change();
 
    void setSubDivName(string CurSubdivisionName);
    void setSurnameBoss(string CurSurnameBoss);
    void setPrize(double CurPize);
    void setPositionsAtSubdiv(string CurPosAtSubdiv);
 
    string getSubdivName();
    string getSurnameBoss();
    double getPrize();
    string getPosAtSubdiv();
};
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
//Subdivision.cpp
#include "stdafx.h"
#include "Subdivision.h"
 
Subdivision::Subdivision() {
 
}
 
Subdivision::Subdivision(string subName, string surnameBossNM, double prizeNM, string posAtSub) {
    subdivisionName = subName;
    surnameBoss = surnameBossNM;
    prize = prizeNM;
    positionsAtSubdiv = posAtSub;
}
 
 
Subdivision::~Subdivision() {
 
}
 
void Subdivision::setSubDivName(string CurSubdivisionName) {
    this->subdivisionName = CurSubdivisionName;
}
void Subdivision::setSurnameBoss(string CurSurnameBoss) {
    this->surnameBoss = CurSurnameBoss;
}
void Subdivision::setPrize(double CurPize) {
    this->prize = CurPize;
}
void Subdivision::setPositionsAtSubdiv(string CurPosAtSubdiv) {
    this->positionsAtSubdiv = CurPosAtSubdiv;
}
 
string Subdivision::getSubdivName() {
    return subdivisionName;
}
string Subdivision::getSurnameBoss() {
    return surnameBoss;
}
double Subdivision::getPrize() {
    return prize;
}
string Subdivision::getPosAtSubdiv() {
    return positionsAtSubdiv;
}
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
//worker.h
#include "stdafx.h"
#include "Subdivision.h"
#include "Position.h"
#include "Projects.h"
 
class WORKERDLL_API Worker
{
private:
    string workerName;
    string workerSurname;
    int accountNumber;
    Subdivision* workerSubdivision;
    Position* workerPos;
    vector <Projects*> workerProjects;
    double YearsOfWork;
public:
    Worker();
    ~Worker();
    void addNewWorker(Worker* CurWorker, vector<Worker*> &AllWorkers);
 
    void setWorkerName(string CurName);
    void setWorkerSurname(string CurSurname);
    void setAccountNumber(int CurAccNumb);
    void setCurSubdivision(Subdivision* CurSub);
    void setCurPos(Position* CurPos);
    void setProjects(vector <Projects*> &CurProjects);
    void setYearsOfWork(double CurYears);
 
    string getWorkerName();
    string getWorkerSurname();
    int getWorkerAccountNumber();
    Subdivision* getWorkerSubdivision();
    Position* getWorkerPos();
    vector<Projects*> getWorkerProjects();
    double getWorkerYearsOfWork();
 
};
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
//Worker.cpp
Worker::Worker() {
 
}
 
Worker::~Worker() {
 
}
 
void Worker::addNewWorker(Worker* CurWorker, vector<Worker*> &AllWorkers) {
    AllWorkers.push_back(CurWorker);
}
 
void Worker::setWorkerName(string CurName) {
    this->workerName = CurName;
}
void Worker::setWorkerSurname(string CurSurname) {
    this->workerSurname = CurSurname;
}
void Worker::setAccountNumber(int CurAccNumb) {
    this->accountNumber = CurAccNumb;
}
void Worker::setCurSubdivision(Subdivision* CurSub) {
    this->workerSubdivision = CurSub;
}
void Worker::setCurPos(Position* CurPos) {
    this->workerPos = CurPos;
}
void Worker::setProjects(vector <Projects*> &CurProjects) {
    this->workerProjects = CurProjects;
}
void Worker::setYearsOfWork(double CurYears) {
    this->YearsOfWork = CurYears;
}
 
string Worker::getWorkerName() {
    return workerName;
}
string Worker::getWorkerSurname() {
    return workerSurname;
}
int  Worker::getWorkerAccountNumber() {
    return accountNumber;
}
Subdivision* Worker::getWorkerSubdivision() {
    return workerSubdivision;
}
Position* Worker::getWorkerPos() {
    return workerPos;
}
vector<Projects*> Worker::getWorkerProjects() {
    return workerProjects;
}
double Worker::getWorkerYearsOfWork(){
    return YearsOfWork;
}
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
#pragma once
#include "stdafx.h"
#include "Worker.h"
 
class iWorker {
    vector<Worker*> AllWorkers;
public:
    iWorker();
    ~iWorker();
    void addWorker();
    void deleteWorker();
    void ShowAllWorkers();
};
 
//Методы ввода и вывода данных о работниках
void iWorker::addWorker() {
    Worker* CurWorker = new Worker();
    string workerName;
    string workerSurname;
    int accountNumber;
    double YearsOfWork;
    Subdivision* workerSubdiv = new Subdivision(); //SUBDIVISION BEGIN
    string subdivisionName;
    string surnameBoss;
    double prize;
    string positionsAtSubdiv; //SUBDIVISION END;
    cout << "Введите имя работника " << endl;
    cin.ignore(cin.rdbuf()->in_avail());
    getline(cin, workerName);
    CurWorker->setWorkerName(workerName);
    cout << "Введите фамилию работника " << endl;
    cin.ignore(cin.rdbuf()->in_avail());
    getline(cin, workerSurname);
    CurWorker->setWorkerSurname(workerSurname);
    cout << "Введите номер счета зарплаты " << endl;
    cin >> accountNumber;
    CurWorker->setAccountNumber(accountNumber);
    cout << "Введите название подразделения, в котором будет работать работник " << endl;   
    cin.ignore(cin.rdbuf()->in_avail());
    getline(cin, subdivisionName); //Вот здесь ввожу имя подразделение, вместо него потом выводится "CDCDCD"
    workerSubdiv->setSubDivName(subdivisionName);   
    cout << "Введите трудовой стаж работника(количество лет) " << endl;
    cin >> YearsOfWork;
    CurWorker->setYearsOfWork(YearsOfWork);
    CurWorker->addNewWorker(CurWorker, AllWorkers);
}
 
void iWorker::ShowAllWorkers() {
    for (int i = 0; i < AllWorkers.size(); i++){
        cout << " Имя работника " << AllWorkers[i]->getWorkerName() << endl;
        cout << " Фамилию работника " << AllWorkers[i]->getWorkerSurname() << endl;
        cout << " Номер счета зарплаты " << AllWorkers[i]->getWorkerAccountNumber() << endl;
        cout << " Подразделение, в котором работает работник " << AllWorkers[i]->getWorkerSubdivision() << endl; //здесь выводится "DCDCD", а не то, что я ввел при вводе 
        cout << " Трудовой стаж работника(лет) " << AllWorkers[i]->getWorkerYearsOfWork() << endl;
    }
}
Добавлено через 1 час 25 минут
Вообщем, если кому понадобится, проблему решил. Была ошибка в том, что в методе
C++
1
void iWorker::addWorker()
я выделял память
C++
1
Subdivision* workerSubdiv = new Subdivision();
, но не помещал ее в worker. Вообщем, надо было дописать такую строчку
C++
1
CurWorker->setCurSubdivision(workerSubdiv);
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2015, 16:11
Ответы с готовыми решениями:

У меня класс B в классе A, а в классе B рекурсивная функция переопределения оператора "()", как её вызвать, не создавая явно объект класса B?
#include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace std; //Вот главный класс class A{...

Использование в качестве поля класса указатель на объект другого класса
Ошибка в названии - &quot;указателЯ&quot; Вот, пытаюсь освоить ООП (пока только учусь): создаю класс...

Ошибка компиляции (преобразование объекта класса в объект другого класса)
Друзья, добрый день! Не могу понять почему выдается ошибка компиляции... Прога преобразует...

Передача конструктору одного класса объект другого класса
Здравствуйте, кодеры. Столкнулся с проблемой. У меня есть 2 класса Camera и Game и...

Объект класса в классе
Товарищи, помогите уже не знаю что делать!! Есть класс Point и класс Pixel, есть методы и там и...

0
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.11.2015, 16:11

Объект класса в другом классе
Здравствуйте! Недавно начал учить классы, прошу помогите мне. Мой написанный код не работает....

Объявление в классе объекта другого класса
какая-то фигня получается, допустим есть 2 класса - class1 и class2, в хедерах class1.h подключён...

Создать в классе поле типа другого класса
Как создать в классе поле типа string? Я пишу просто string Name, но компилятор ругается.


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.