С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
dzheka3d
2 / 2 / 0
Регистрация: 08.06.2012
Сообщений: 49
#1

Массив: Подсчет матрицы 3x3 по средствам класса используя оператор ">>" - C++

07.02.2013, 11:45. Просмотров 420. Ответов 6
Метки нет (Все метки)

Здравствуйте! Помогите плз разобраться... У меня было задание в универе создать прогу подсчета матрицы 3x3 по средствам класса используя оператор ">>".
Прогу-то я написал и правильно (под сообщением листинг), но препод требует сказать:
1. Где тут использование полиморфизма
2. как он тут используется
3. Что это за оператор ">>". Чем он был в C# и чем является в C++
4. Что именно в этой строке cin>>myM; является полиморфизмом. Его словами: "Где тут полиморфизм".
Ребят, выручайте...

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
#include <iostream.h>
 #include <conio.h>
 class matrix            
 {
       int **M;          
       public:
       matrix()
       {
        M=new int*[3];
        for(int i=0;i<3;i++)
                M[i]=new int[3];
        }
       friend ostream& operator << (ostream& os, matrix &m);
       friend istream& operator >> (istream& is, matrix &m);
 };
         ostream& operator << (ostream& os, matrix &m)
        {
                int i,j;
                for(i=0;i<3;i++)
                {
                        for(j=0;j<3;j++)
                               os <<m.M[i][j]<<"  ";
                        os<<endl;
                }
                return os;
        }
        istream& operator >> (istream& is, matrix &m)     
        {
                int i,j;
                for(i=0;i<3;i++)
                        for(j=0;j<3;j++)
                                is>>m.M[i][j];       
                return is;
        }
int main()
{
        matrix myM;                                   
        cout<<"Input matrix"<<endl;
        cin>>myM;                                    
        cout<<"Out matrix"<<endl;
        cout<<myM; 
        getch();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2013, 11:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив: Подсчет матрицы 3x3 по средствам класса используя оператор ">>" (C++):

Разработать класс "Массив больших чисел", который состоит из объектов класса "Большие целые числа". Найти сумму элементов массива. - C++
Разработать класс &quot;Массив больших чисел&quot;, который состоит из объектов класса &quot;Большие целые числа&quot;. Найти сумму элементов массива. ...

Определить перегруженный бинарный и унарный оператор* для класса "Комплексное число" - C++
Как можно реализовать перегруженный бинарный и унарный оператор* для класса &quot;Комплексное число&quot;?

Как перегрузить оператор "+" для шаблонного класса, инстанцированного разными типами? - C++
подскажите как перегрузить оператор &quot;+&quot; для шаблона , инстанцированных разными типами ...

Возможно ли для класса сделать оператор "[][]"? - C++
Вообщем вопрос можно ли сделать для класса оператор ; Пример для наглядности element;

В зависимости от времени года "весна", "лето", "осень", "зима" определить погоду "тепло", "жарко", "холодно", "очень холодно" - C++
В зависимости от времени года &quot;весна&quot;, &quot;лето&quot;, &quot;осень&quot;, &quot;зима&quot; определить погоду &quot;тепло&quot;, &quot;жарко&quot;, &quot;холодно&quot;, &quot;очень холодно&quot;. Я так...

Объяснить что такое "раздельная компиляция", что такое "интерфейс класса" и "реализация класса" на примере - C++
Есть класс, содержащий объекты и конструктор. Конструктор объявляется в одном из cpp файлов(их несколько). Можно ли, как-то, использовать...

6
mrmaster88
42 / 42 / 3
Регистрация: 13.04.2012
Сообщений: 112
07.02.2013, 12:06 #2
Вы перегружаете оператор << и >> для вывода объекта, это и есть полиморфизм.(<< и >>- это операторы сдвига изначально)
1
dzheka3d
2 / 2 / 0
Регистрация: 08.06.2012
Сообщений: 49
07.02.2013, 13:22  [ТС] #3
Блииин!!! Точно, спасибо!!

Добавлено через 56 минут
А еще вопрос плз... А почему программа выбирает именно мой метод а не стандартный ввод вывод?
0
mrmaster88
42 / 42 / 3
Регистрация: 13.04.2012
Сообщений: 112
07.02.2013, 18:40 #4
Цитата Сообщение от dzheka3d Посмотреть сообщение
А почему программа выбирает именно мой метод а не стандартный ввод вывод?
сначала программа разбирает аргументы в cout/cin,так как там объект, то берется именно перегруженный вариант(из класса).
вот так оно устроено по перегрузке,вы объявили свой метод и компилятор его "понял"))
0
dzheka3d
2 / 2 / 0
Регистрация: 08.06.2012
Сообщений: 49
09.02.2013, 14:14  [ТС] #5
Ребят срочно.. на пересдаче сижу....
Что означает каждое слово в этой строке istream& operator >> (istream& is, matrix &m)
и во что должен первратиться оператор сдвига >> чтобы перегрузить стандартную функцию...
Дословно написал то, что спросил препод...
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 760
09.02.2013, 14:45 #6
operator >> - это имя функции, которая перегружает оператор ввода
при этом он не является членом класса matrix-объекта и заявлен как friend istream&, чтобы беспрепятсвено получать доступ к private-членам matrix для istream
(istream& is, matrix &m)
ну тут просто, это значит что наш оператор перегружен для случаев, когда с левой стороны некий входной поток (istream) для конктретики в реализации назовём его is и с правой стороны оператора наш класс (matrix), опять же для конкретики в реализации назовём его m, т.е. если cin - входной поток, а MyObj - представитель класса matrix, то по cin>>matrix сработает эта перегрузка
символы & в обоих случаях что не надо передавать всё это дело и создавать локальные варианты внутри реализации, достаточно лишь ссылок на эти объекты

Добавлено через 6 минут
опс... cin>>MyObj конечно )
1
dzheka3d
2 / 2 / 0
Регистрация: 08.06.2012
Сообщений: 49
10.02.2013, 00:40  [ТС] #7
Спасибо огромное ребят ; ) Очень помогли... abit, ответ вообще суппер!!!
Я сдал ))
0
10.02.2013, 00:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 00:40
Привет! Вот еще темы с ответами:

Реализация класса "Студент" и наследование от него класса "Аспирант" - C++
Помогите, пожалуйста! Создать абстрактный базовый класс Person, описывающий обычного человека. Создайте производный класс Student,...

C2678 бинарный ">>": не найден оператор, принимающий левый операнд типа "std::ostream" - C++
Код: #include &lt;iostream&gt; #include &lt;memory&gt; #include &lt;typeinfo&gt; #include &lt;ctime&gt; #include &lt;windows.h&gt; #include &lt;ostream&gt; ...

бинарный "++": "Counter" не определяет этот оператор или преобразование к типу приемлемо к встроенному - C++
бинарный &quot;++&quot;: &quot;Counter&quot; не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору #include &lt;iostream&gt; ...

Error C2678: бинарный ">>": не найден оператор, принимающий левый операнд типа "std::istream" - C++
Вот ошибка 1&gt;------ Построение начато: проект: ыпошряоям, Конфигурация: Debug Win32 ------ 1&gt; файл.cpp 1&gt;c:\users\hp\desktop\уроки...


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

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

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