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

Использование классов - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Блондинка_)
0 / 0 / 0
Регистрация: 24.01.2011
Сообщений: 23
26.01.2011, 12:55     Использование классов #1
Класс Члены класса Методы Операторы перегрузки Исходные данные
Матрица Размерность Конструктор, Сложение (+), A=(5 1 7
матрицы, деструктор, вычитание (-), 10 -2 1
элементы метод вывода умножение (*) 2-х 0 1 2)
матрицы матрицы, матриц, умножение
метод вычисления матрицы на число (*=) B= (2 4 1
определителя 2 1 0
матрицы 7 2 1)



Результаты
С=2(A–B)(A2 + B)
Найти |C|
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2011, 12:55     Использование классов
Посмотрите здесь:

Совместное использование классов C++
C++ Использование классов
Создание и использование классов C++
Использование классов Worda C++
Использование классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
26.01.2011, 14:02     Использование классов #21
Цитата Сообщение от silent_1991 Посмотреть сообщение
taras atavin, странное задание... Как так, оператор [] возвращает объект класса, но этот объект не должен иметь метода ресайз, а сам класс должен... Очень странно. Я понимаю так: либо класс имеет публичный метод, либо он его не имеет.
Оно так. Но ведь можно иметь два класса. Не знаю, может предок с потомком, но по оператору должна возвращаться не совсем такая строка, как декларируется в качестве самостоятельного объекта. То есть, "строка" и "строка матрицы" - должно быть не одно и тоже. Но при этом надо в обе стороны поддерживать присваивание. Какой класс лучше от какого наследовать? И можно ли вообще в наследнике отключить метод предка? Не перенести в привэйт, а полностью исключить его из класса.

Добавлено через 6 минут
И если оператор возвращает объект, можно ли класс этого объекта объявить в привэйте? То есть
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Matix
{
 private:
 Row *data;
 unsigned int cols;
 unsigned int rows;
 class RowOfMatrix
 {
   ....
 }
 public:
 RowOfMatrix & operator [](int index)
 {
  return (RowOfMatrix)(data[index]);
 }
 ...
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
26.01.2011, 14:26     Использование классов #22
Логично было бы, конечно, наследовать класс RowOfMatrix от Row, ведь строка матрицы - это частный случай строки.
На счёт исключить - не знаю, честно говоря. Может действительно в приват его запихнуть и без реализации оставить.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.01.2011, 06:41     Использование классов #23
Цитата Сообщение от silent_1991 Посмотреть сообщение
Может действительно в приват его запихнуть и без реализации оставить.
А для этого метод предка обязательно должен быть виртуальным? И если в предке уже есть
C++
1
2
3
4
Row & Row::opeartor = (Row &x)
{
 ...
}
, то это уже гарантирует работу данного оператора с правым операндом, тип которого - потомок? И надо ли указывать в предке, что этот оператор виртуальный, чтоб перекрыть его в потомке (в предке при несовпадении размеров надо менять размер левого операнда, а в потомке в той же ситуации бросать исключение)?

Добавлено через 1 минуту
И если оператор возвращает объект, можно ли класс этого объекта объявить в привэйте? То есть допустимо ли
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Matix
{
 private:
 Row *data;
 unsigned int cols;
 unsigned int rows;
 class RowOfMatrix
 {
   ....
 }
 public:
 RowOfMatrix & operator [](int index)
 {
  return (RowOfMatrix)(data[index]);
 }
 ...
};
?
Сабина Сафронов
0 / 0 / 0
Регистрация: 22.12.2010
Сообщений: 6
27.01.2011, 07:00     Использование классов #24
Кристофер, что-то я тут ничего не могу понять что тебе тут написали, это 3 варианта решения одной задачи?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.01.2011, 08:49     Использование классов #25
taras atavin, нет, по-моему виртуальным быть не обязан. Просто вы объявляете его в предке в паблике, а в потомке скрываете его в привате.
На счёт объявления класса в привате - не уверен, лучше объявите его за пределами и сделайте композицию. А с другой стороны, почему бы вам не проверить это?)))
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.01.2011, 09:04     Использование классов #26
Цитата Сообщение от silent_1991 Посмотреть сообщение
делайте композицию.
А что это такое?
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
27.01.2011, 09:17     Использование классов #27
Это когда элементами одного класса являются экземпляры другого. Но я уже понял, что вам тут не композиция нужна, а нужно просто, чтобы метод одного класса возвращал экземпляр другого. Просто не мучайтесь и объявите этот класс отдельно, а не внутри другого класса.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.01.2011, 09:23     Использование классов
Еще ссылки по теме:

Использование классов C++
C++ Использование классов
C++ Использование классов

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

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
27.01.2011, 09:23     Использование классов #28
А смысл его снаружи объявлять? В результате же можно будет вне Matrix создавать объекты класса RowOfMatrix. Я же хотел ещё запретить создавать вне Matrix даже указатели на RowOfMatrix. Хотя, это уже не обязательно.

Добавлено через 3 минуты
Цитата Сообщение от silent_1991 Посмотреть сообщение
Это когда элементами одного класса являются экземпляры другого.
Понятно. В принципе, с таким подходом я знаком, даже использовал чаще наследования, но для других задач и самого слова не знал. И в данном случае, композиция тоже имеет место:
C++
1
2
3
4
5
class Matrix
{
 private:
  Row *data;
 ...
Yandex
Объявления
27.01.2011, 09:23     Использование классов
Ответ Создать тему
Опции темы

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