Доступ к данным в другом классе

174
24 февраля 2018, 22:16

Добрый день! Вопрос по ООП на С++ (отредактировал, убрал наследование)

Столкнулся с такой проблемой: есть класс Bank, и есть класс Сlient, который содержит личные данные. В Bank есть вектор, который содержит объекты класса Client (проще говоря, содержит объекты, каждый из которых конкретный клиент).

И есть задача: в Bank написать функцию print() , которая распечатывала бы данные всех клиентов, которые содержатся в векторе. Только как это сделать правильно? Первая мысль была создать в Client функцию, которая возвращала бы все данные ( или несколько функций), и таким образом передать это в print().

Но это решение не совсем верное: получается, я раскрываю данные конкретных клиентов. Как сделать так, чтобы не создавать такую функцию? спасибо!!

#include <iostream>
#include <time.h>
#include <vector>
#include <string>
using std::vector;
using std::string;
using std::cout;
using std::endl;
//--------class--------
class Client  {
public:
    //constructor
    Client(string name, int ID)  {
        this->ID = ID;
        this->name = name;
    }
    //function that returns ID of client
    int return_ID() {
        return ID;
    }
    //function that returns name of client
    string return_name() {
        return name;
    }
private:
    int ID;
    string name;
};
//---------------------------------------
class Bank {
private:
    //vector of clients
    vector<Client*> clients;

public:
    //function for adding clients to vector
    void addclientd(Client* client) {
        clients.push_back(client);
    }
    //function for printing data of clients
    void print() {
        for (int i = 0; i < clients.size(); i++) {
            cout << "ID is " << clients[i]->return_ID() << "   ";
            cout << "Name is " << clients[i]->return_name() << endl;
        }
    }
};


//---------------------------------
int main() {

    Client Ivanov("Ivanov", 3234);
    Client Somebody("Somebody", 2345);
    Bank bank;
    bank.addclientd(&Ivanov);
    bank.addclientd(&Somebody);
    bank.print();
    system("pause");
    return 0;
}
Answer 1

Организуйте у класса Client метод print() который будет выводить данные экземпляра.

А у банка аналогично метод print() должен в цикле перебирать вектор клиентов и вызывать вышеуказанный метод клиента.

И прочитайте про стиль написания кода, будет полезно.

READ ALSO
c++ list iterator is not dereferencable

c++ list iterator is not dereferencable

Есть отсортированный по алфавиту список с фамилиями, содержащийся в

185
Visual Studio пересечение заголовочных файлов

Visual Studio пересечение заголовочных файлов

Имеется простой проект DxЯ подключаю заголовочный и библиотеку

190