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

Двухстороннее взаимодействие классов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить сумму заштрихованных элементов матрицы http://www.cyberforum.ru/cpp-beginners/thread1566739.html
добрый вечер, помогите вычислить сумму заштрихованных элементов матрицы. заранее спасибо.
C++ Аргументы потоку pthread Добрый день, нужен совет как лучше написать запуск потоков структура для передачи в поток struct thread_arg { CTCPServer* pServer; int sock_desc; http://www.cyberforum.ru/cpp-beginners/thread1566723.html
с++ rectangle C++
Всем привет,падает первый же ассерт в rectangle_test.cpp,не могу понять почему,преподаватель сказал что намутил с инициализацией,но вроде в самих тестах она происходит(или я че то путаю).Как решить проблему хотя бы для первого ассерта?Надеюсь на помощь) rectangle.hpp #ifndef _RECTANGLE_HPP_ #define _RECTANGLE_HPP_ ...
C++ Ошибка afx.h
Вот такая: 4 IntelliSense: #error directive: Building MFC application with /MD (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD d:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\include\afx.h 24 2 maestro-m Почему? Добавлено через 14 минут Решено: Configuration Properties / General / Use of MFC / Use MFC in a Shared DLL
C++ К элементам, стоящим на главной диагонали матрицы, добавить максимальные элементы строк http://www.cyberforum.ru/cpp-beginners/thread1566668.html
Если все максимальные элементы столбцов превышают произведение минимальных элемен-тов строк, то к элементам стоящим на главной диагонали добавить соответствующие максимальные элементы строк. В противном случае матрицу оставить без изменения.
C++ В строках матрицы сначала расположить все элементы, меньшие 5, а потом все остальные Преобразовать элементы строк матрицы таким образом, чтобы сначала располагались все элементы, меньшие 5, а потом все остальные. подробнее

Показать сообщение отдельно
Melg
538 / 159 / 64
Регистрация: 23.09.2013
Сообщений: 314
31.10.2015, 16:33
RAFA91, В Вашем случае два класса полностью повторяют функциональность, поэтому можно избавиться от дублирования кода, оставив один класс. Кроме того, названия некоторых Ваших функций и переменных не соответствуют их реальному смысловому значению, поэтому их следует переименовать, для уменьшения семантического шума от Вашего кода. Пример слегка отредактированной версии:
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 <iostream>
#include <string>
 
using std::cout;
using std::endl;
 
class A {
 public:
  A(int x) : x_(x) {}
 
  int y() const { return y_; }
 
  void set_z(int z) { z_ = z; }
 
  void show() const {
    cout << "x = " << x_ << " y = " << y_ << " z = " << z_ << endl;
  }
 
  void calculation() {
    y_ = x_ + z_;
    x_ += z_;
  }
 
 private:
  int x_ = 0;
  int y_ = 0;
  int z_ = 0;
};
 
void ShowSeparator() { cout << "*************************" << endl; }
 
int main() {
  A a(28);
  A b(34);
  a.calculation();
  b.calculation();
  a.show();
  b.show();
  //передача информации от А к В
  b.set_z(a.y());
  //передача информации от B к A
  a.set_z(b.y());
  ShowSeparator();
  a.show();
  b.show();
}
Пруф работоспособности:
http://ideone.com/z4V1Lv

Отвечая на Ваш вопрос: если Вам необходимо передавать исключительно данные, без поведения - тогда передача в качестве возвращаемых значений и аргументов функций вполне приемлема. В данном случае вы отделяете код непосредственной логики выполнения (инкапсулируете его в классе), от более высокоуровневой логики, за которую в Вашем случае отвечает функция main. В более сложных ситуациях, когда, например, требуется изменять поведение в процессе работы - используют связку - наследование + виртуальные функции, что дает возможность передавая указатель на базовый (часто абстрактный) класс - в класс - приемник - получать разное поведение приемника, в зависимости от того, какая конкретная реализация базового класса была передана.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru