powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите с классом и наследование!
9 сообщений из 9, страница 1 из 1
Помогите с классом и наследование!
    #32568870
Югг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть задачка на перестановку строк в матрице 2Х2. Задачка решена в самом простом варианте и в варианте с использованием класса. Теперь ее же нужно решить еще с использованием потомка класса. Не знаю как сделать помогите.
Код: plaintext
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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
Это с использованием класса

#include <iostream.h>
#include <stdio.h>
#include <STDLIB.H>
#include <CONIO.H>

int Arr[ 5 ][ 5 ];
int Vec[ 1 ][ 5 ];

class MASS// класс
{
private:
public:
void print_out (int b, int w)
 {
   Arr[w]=Arr[b+ [b]1 ][w];
 }
protected:

};

void main (void)
{
 int SS,KK,WW;
 int A;
 randomize();
 for (int i= 1 ; i<= 5 ; i++)
  {// заполнение массива случайными символами
   for (int j= 1 ; j<= 5 ; j++)
    {
       Arr[i][j]=random( 10 );
    }
  }
clrscr();
while (SS>=KK)
{// предложение о вводе перемещаемых строк
 printf("Введите номер перемещаемой строки S ");
 cin>>SS;
 printf("Введите позицию, куда переместить строку K (K>S) ");
 cin>>KK;
}
for (int ii= 1 ; ii<= 5 ; ii++)
 {// вывод изначальной матрицы
  printf("\n");
  for (int jj= 1 ; jj<= 5 ; jj++)
    {
	cout<<Arr[ii][jj];
    }
 }
MASS dim;
printf("\n");printf("\n");
// запоминание в вектор первой строки
for (int h =  1 ; h <=  5 ; h++)
  { Vec[ 1 ][h]=Arr[SS][h];}

for (int BB=SS; BB<KK; BB++)
   {// перемещение строк от s до k вверх
    for(int WW =  1 ; WW <=  5 ; WW++)
       {dim.print_out(BB,WW);}
   }
// выставляем первую строку
for(int r =  1 ; r <=  5 ; r++)
  { Arr[KK][r]=Vec[ 1 ][r];}

for (int d= 1 ; d<= 5 ; d++)
{// вывод результирующего массива
 printf("\n");
 for (int e= 1 ; e<= 5 ; e++)
    {
	cout<<Arr[d][e];
    }
}
cin>>A;
}

Теперь нужно заполнение массива перенести в класс, а перестановку в наследуемый класс. Помогите плизззз!!! Время поджимает, а я еще не разобралась с этим.
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32568903
Югг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну неужели никто не поможет? Срочно надо. хотя бы структурно подскажите как переделать. Да в начале я ошиблась матрица не 2Х2, а 5Х5.
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32569021
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собрался было написать, но призадумался....

Это вообще работает?

Нафиг нужен MASS dim;?

и что за странная void print_out (int b, int w)?

Такое чувство, что это не перестановка, а перемещение со сдвигом...

И не совсем ясно, куда тут и зачем впихнуть наследуемый класс?
Чё он должен наследовать, если у MASS ничё нету кроме одного метода.
И что он должен иметь своё, чего нет у родителя?

Я так думал, матрица должна быть внутри класса, а не снаружи(ибо нафиг тогда класс тут вообще?)

Функцию заполнения матри случайными числами - туда же в класс.

dim.print_out(BB,WW); - это вообще радостная строчка. Заведение экземпляра класса для прогона строк глобально описанной матрицы...
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32569042
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И с индексами у вас большие проблемы...

вещи типа
int ii=1; ii<=5; ii++
работать не будут.

Код: plaintext
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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
Это с использованием класса

#include <iostream.h>
#include <stdio.h>
#include <STDLIB.H>
#include <CONIO.H>

int Vec[ 1 ][ 5 ];

class MASS// класс
{
public:
int Arr[ 5 ][ 5 ];

public:
void print_out (int b, int w)
 {
   Arr[w]=Arr[b+ [b]1 ][w];
 }

void init()
{
 randomize();
 for (int i= 0 ; i< 5 ; i++)
  {// заполнение массива случайными символами
   for (int j= 0 ; j< 5 ; j++)
    {
       Arr[i][j]=random( 10 );
    }
  }
}

void print()// тут даже следовало бы перегрузить "<<" но лень...
{
for (int ii= 0 ; ii< 5 ; ii++)
 {
  printf("\n");
  for (int jj= 0 ; jj< 5 ; jj++)
    {
	cout<<Arr[ii][jj];
    }
 }
}
protected:

};

void main (void)
{
MASS MTX;
 int SS,KK,WW;
 int A;
clrscr();
//инициализация
MTX.Init();// вызвали метод, который забъёт всё случайными

while (SS>=KK)
{// предложение о вводе перемещаемых строк
 printf("Введите номер перемещаемой строки S ");
 cin>>SS;
 printf("Введите позицию, куда переместить строку K (K>S) ");
 cin>>KK;
}
// вывод изначальной матрицы
MTX.print();

printf("\n");printf("\n");

// запоминание в вектор первой строки
for (int h =  0 ; h <  5 ; h++)
  { Vec[ 0 ][h]=MTX.Arr[SS][h];}

for (int BB=SS; BB<KK; BB++)
   {// перемещение строк от s до k вверх
    for(int WW =  0 ; WW <  5 ; WW++)
       {MTX.print_out(BB,WW);}
   }
// выставляем первую строку
for(int r =  0 ; r <  5 ; r++)
  { MTX.Arr[KK][r]=Vec[ 0 ][r];}

// вывод результирующего массива
MTX.print();
cin>>A;
}

можно ещё лучше сделать...

Так при чём тут наследуемый класс?
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32569052
Югг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все просто задачка для сдачи зачета. Вначале ориентировалось все просто на класс. Дали задание (причем без объяснений что есть что) написать перестановку строк в матрице со сдвигом использую классы. Вот и вся формулировка. Без класса я задачу написала быстро. Потом для простоты, в класс сунула одну единственную функцию, которая заменяет элементы сдвигаемой строки. И все.

Это все работает, проверенно.
Писалось все по книжке двадцатилетней давности, так как разбираться глубоко было некогда.

А затем препод задачку усложнил, сказал еще наследование применить. А вот с этим я подзависла.

Наверное действительно матрицу лучше сунуть внутрь класса. (Хотя лучше или хуже, я в этом мало смыслю :-) эх надо начинать разбираться с классами, да все времени нет).

Поэтому и прошу помощи.
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32569419
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто все работает, проверенно.
Не работает.
То, что оно не падает и компилируется - ещё ничё не значит.
Попробуйте подставить в матрицу реальные значения - перестанет работать:
Индексы в сях идут с нуля (даже анекдот такой есть).

Поэтому
for (int i=1; i<=5; i++)
Мало того что не зацепит первый элемент массива, так и ещё с индексом 5 покоцает кусок памяти, выделенный под другое.

Ладно фигня, если тока для зачёта, то фиг с ним, а если дальше работать, то жизь научит этому 100% :)

авторНаверное действительно матрицу лучше сунуть внутрь класса. (Хотя лучше или хуже, я в этом мало смыслю :-)
Классы для того и придуманы, чтобы собрать данные и действия над ними в одном месте.

Пример:
Надо почистить 10 картошек.
Без классов: как у вас
Картошка[10]
для i=1; i<=10; i++
Взять(картошка )
Помыть(картошка)
Срезать_шкуру(картошка)
Вырезать_глазки(картошка)
Помыть(картошка)

Причём первая останется не мытая, а вместо неё будет помыть и почищен предмет, который попадётся под руку вместо 11-й картошки.
А если учесть, что глазки и шкура - это отдельные элементы, которые тоже надо как-то обработать(выкинуть в мусорку) то вообще вешалка...

С классами:
Пишем класс
CКартошка
{
Картошка К;
Чистить();
{
К это Картошка?
Если нет - уходим.
Взять(К)
Помыть(К)
Срезать_шкуру(К)
Вырезать_глазки(К)
Помыть(К)
}
}

CКартошка картопка[10]
для i=0; i<10; i++
картопка.чистить()

причём, если изменится способ чистки картошки, мне не надо будет лазить по коду и исправлять все чистки, достаточно просто поменять код в одном месте.
К тому же я ещё добавил проверку на картошечность, которая на коде программы никак не видна, но спасает от ошибки.

А если ещё добавит сюда класс Туфля
и ему метод "чистить" (помыть, намазать кремом, натереть тряпкой)
То в коде не надо греть голову на тему "как"
картошка.чистить()
ботинок.чистить()
и всё выполнится правильно, как написано у каждого в классе.

авторА затем препод задачку усложнил, сказал еще наследование применить.
Вот пусть он скажет, что он имел ввиду.
Потому что наследование это такая штука когда класс в наследство получает все(почти) данные и все(почти) методы родительского и добавляет к ним что-то своё.
В данном случае, есть матрица с методами, которые решают задачу.
Вопрос(преподу): что должно добавиться в дочернем классе?
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32569560
Югг
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за наглядное и доступное описание класса. Все стало более ли менее понятно, а преподу обязательно задам вопрос. (надеюсь что зачет все таки получу :-) ).

А вот насчет индексов... Может вы и правы, но в данном случае работает это точно так как я не только компилировала , но и запускала на выполнение. Все работает.

Но учту на будущее, что индексы надо начинать с нуля.
Большое спасибо. Почитаю книжку просто про наследование, если препод докопается, чтобы хоть что-то сказать. :-)
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32572159
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 CEMb

авторВот пусть он скажет, что он имел ввиду.
Потому что наследование это такая штука когда класс в наследство получает все(почти) данные и все(почти) методы родительского и добавляет к ним что-то своё.
В данном случае, есть матрица с методами, которые решают задачу.
Вопрос(преподу): что должно добавиться в дочернем классе?

Скорее всего препод добивался от студента объявления метода занимающегося перестановкой виртуальным и замещения его в наследнике. Хотя и ежу понятно, что по хорошему эта задача решается не наследованием, а применением паттерна стратегия.
...
Рейтинг: 0 / 0
Помогите с классом и наследование!
    #32572880
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторприменением паттерна стратегия

А что это?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Помогите с классом и наследование!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]