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

Разделение данных и логики и ООП - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Что означает запись (struct addr *)&one http://www.cyberforum.ru/cpp-beginners/thread1496702.html
Что означает тринадцатая строчка в коде? #include <iostream> using namespace std; int main() { struct addr { int a; };
C++ Найти наименьшее и наибольшее из пяти чисел Вобщем суть такая.. Читаю книгу и теперь необходимо выполнить такое задание "Напишите программу, которая считывает пять целых чисел, определяет и печатает наибольшее и наименьшее из них. Используйте только те приемы программирования, которые вы изучили в этой главе." Изучены были только простейшие операторы сложения, вычитания и т.п. и if.. Пример одного из решенных мной заданий #include... http://www.cyberforum.ru/cpp-beginners/thread1496697.html
Создание COM DLL: ошибка в приведении типов C++ COM
Здорова! Читаю про COM, в книге нашел пример Пример EX24B - обычная MFC DLL, содержащая настоящую COM-версию класса CSpaceship. Вот код Файл INTERFACE.h: struct IMotion : public IUnknown { STDMETHOD_(void, Fly) ()=0;
Как вызвать из метода метод? C++
Здравствуйте. Прошу Вас помочь. Как мне вызвать из метода Set метод Draw? Мне надо передать объект A в Draw (у которого есть координаты x и y). void My_Point:: Set(int xx ,int yy) // Сохранение координат x и y { x=xx; y=yy; A->Draw(this->pictureBox1); // НЕ РАБОТАЕТ } void My_Point:: Draw(System::Windows::Forms::PictureBox ^Pbx) // Присвоение...
C++ Двумерный vector в классе http://www.cyberforum.ru/cpp-beginners/thread1496677.html
Добрый день. Возникла задача хранить в классе данные в двумерном vector. Причем, количество строк и столбцов заранее неизвестно. Они считываются из файла. Задаю двумерный вектор так: std::vector<std::vector<int> > matrix(row); Но при описании класса мы не можем задавать конкретные значения.
C++ Для каждой группы чисел найти минимальное, максимальное и среднеарифметическое Народ,помогите,нужна ваша помощь в написании кода Очень очень выручите нужен только программный код задание такое сгенерировать файл, случайные целые числа в диапазоне от -100 до 100, количество 100шт, сохранить в input.txt загрузить input.txt, отсортировать по возрастанию любым алгоритмом четные числа сохранить в файл even.txt, нечетные в odd.txt для каждой группы чисел найти... подробнее

Показать сообщение отдельно
ReDoX
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 10

Разделение данных и логики и ООП - C++

10.07.2015, 14:56. Просмотров 330. Ответов 5
Метки (Все метки)

Тренируюсь в ООП и вообще в C++ и появилась неприятная ошибка. Есть конструктор в классе BaseHouse:

C++
1
BaseHouse(unsigned int height, unsigned int width, unsigned int square);
И класс, который наследует BaseHouse и в нем конструктор:

C++
1
2
3
4
5
class House : BaseHouse {
 public:
  House(unsigned int height, unsigned int width, unsigned int square,
        unsigned int number, const std::string& name);
}
Собственно вопрос: почему нельзя наследовать конструктор сразу в .h файле?

C++
1
2
3
4
5
6
class House : public BaseHouse {
 public:
  House(unsigned int height, unsigned int width, unsigned int square,
        unsigned int number, const std::string& name)
    : BaseHouse(height, width, square);
}
Выкидывает исключение - "expected «{» at end of input".

К примеру, у кого - то есть только .h файл, откуда он узнает, что этот конструктор в реализации вызывает базовый конструктор?

Полный код, если кому - нибудь требуется:

Кликните здесь для просмотра всего текста

base_house.h:

Кликните здесь для просмотра всего текста

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
#ifndef HOUSE_BASE_HOUSE_H_
#define HOUSE_BASE_HOUSE_H_
 
/**
 * @file
 * @class BaseHouse
 * @brief Базовый класс для всех домов
 */
class BaseHouse {
 public:
  /**
   * @brief Стандартный конструктор
   * @details Инициализирует все поля нулем
   */
  BaseHouse();
  /**
   * @brief Устанавливает значения аргументов равным соответствующим полям в классе
   * @param[in] height Искомая высота
   * @param[in] width  Искомая ширина
   * @param[in] square Искомая площадь
   */
  BaseHouse(unsigned int height, unsigned int width, unsigned int square);
  /**
   * @brief Возвращает искомую высоту
   * @return Поле height_
   */
  unsigned int get_height();
  /**
   * @brief Возвращает искомую ширину
   * @return Поле width_
   */
  unsigned int get_width();
  /**
   * @brief Возвращает искомую площадь
   * @return Поле square_
   */
  unsigned int get_square();
  /**
   * @brief Устанавливает высоту равную аргументу
   * @param[in] height Искомая высота
   */
  void set_height(unsigned int height);
  /**
   * @brief Устанавливает щирину равную аргументу
   * @param[in] width Искомая высота
   */
  void set_width(unsigned int width);
  /**
   * @brief Устанавливает площадь равную аргументу
   * @param[in] height Искомая высота
   */
  void set_square(unsigned int height);
 protected:
  unsigned int height_; ///< Высота
  unsigned int width_;  ///< Ширина
  unsigned int square_; ///< Прощадь
};
 
#endif // HOUSE_BASE_HOUSE_H_


base_house.cc:

Кликните здесь для просмотра всего текста

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
#include "base_house.h"
 
#include <iostream>
 
BaseHouse::BaseHouse() {
  std::cout << "Создан дом" << std::endl;
 
  height_ = 0;
  width_ = 0;
  square_ = 0;
}
BaseHouse::BaseHouse(unsigned int height, unsigned int width,
                     unsigned int square) {
  std::cout << "Создан дом" << std::endl;
 
  height_ = height;
  width_ = width;
  square_ = square;
}
 
unsigned int BaseHouse::get_height() {
  return height_;
}
unsigned int BaseHouse::get_width() {
  return width_;
}
unsigned int BaseHouse::get_square() {
  return square_;
}
 
void BaseHouse::set_height(unsigned int height) {
  height_ = height;
}
void BaseHouse::set_width(unsigned int width) {
  width_ = width;
}
void BaseHouse::set_square(unsigned int square) {
  square_ = square;
}


house.h:

Кликните здесь для просмотра всего текста

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
#ifndef HOUSE_H_
#define HOUSE_H_
 
#include <string>
 
#include "base_house.h"
 
/**
 * @file
 * @class House
 * @brief Дочерний класс BaseHouse
 */
class House : public BaseHouse {
 public:
  /**
   * @brief Стандартный конструктор
   * @details Инизиализует все поля нулем
   */
  House();
  /**
   * @brief Устанавливает значения аргументов равным соответствующим полям в классе
   * @param[in] height Искомая высота
   * @param[in] width  Искомая ширина
   * @param[in] square Искомая площадь
   * @param[in] number Искомый номер
   * @param[in] name   Искомое имя
   */
  House(unsigned int height, unsigned int width, unsigned int square,
        unsigned int number, const std::string& name);
  /**
   * @brief Возвращает искомый номер
   * @return Поле number_
   */
  unsigned int get_number();
  /**
   * @brief Возвращает искомое имя
   * @return Поле name_
   */
  std::string get_name();
  /**
   * @brief Устанавливает номер равный аргументу
   * @param[in] number Искомый номер
   */
  void set_number(unsigned int number);
  /**
   * @brief Устанавливает имя равное аргументу
   * @param[in] name Искомое имя
   */
  void set_name(const std::string& name);
 private:
  unsigned int number_;  ///< Номер
  std::string name_;    ///< Имя
};
 
#endif // HOUSE_H_


house.cc:

Кликните здесь для просмотра всего текста

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
#include "house.h"
 
House::House()
    : BaseHouse::BaseHouse() {
  number_ = 0;
  name_ = "";
}
House::House(unsigned int height, unsigned int width, unsigned int square,
             unsigned int number, const std::string& name)
    : BaseHouse(height, width, square) {
  number_ = number;
  name_ = name;
}
 
unsigned int House::get_number() {
  return number_;
}
std::string House::get_name() {
  return name_;
}
 
void House::set_number(unsigned int number) {
  number_ = number;
}
void House::set_name(const std::string& name) {
  name_ = name;
}


Также, добавил исходники в архив.



P.S. Под разделением данных и логики имелось в виду, что код будет в .cc файле, а все объявления в .h файле.
Вложения
Тип файла: 7z src.7z (1.6 Кб, 0 просмотров)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru