Spisok.h

#pragma once class Spisok { int size1; int size2; int **mas; public: Spisok(int,int); ~Spisok(); int get(int, int); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов void get(); // Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ void sort1(int); //сортировка ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ строки void sort2(int); //сортировка ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ столбца }; 

Spisok.cpp

  #include "stdafx.h" #include "Spisok.h" #include <stdio.h> #include <stdlib.h> #include <time.h> #include<iostream> #include<conio.h> Spisok::Spisok(int n, int m) { size1 = n; size2 = m; mas = new int*[size1]; for (int i = 0; i < size1; i++) mas[i] = new int[size2]; srand(time(NULL)); for (int i = 0; i < size1; i++) for (int j = 0; j < size2; j++) mas[i][j] = rand() % 100; } //инициализация поля ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΌΠΈ числами Spisok::~Spisok() { } int Spisok::get(int n, int m) { return mas[n - 1][m - 1]; }//Π²Ρ‹Π²ΠΎΠ΄ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΉ ячСйки void Spisok::get() { for (int i = 0; i < size1; i++) { std::cout << "\n"; for (int j = 0; j < size2; j++) std::cout << mas[i][j] << "\t"; } }//Π²Ρ‹Π²ΠΎΠ΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ void Spisok::sort1(int n) { for (int i = 0; i < size2 - 1; i++) { if (mas[n][i] > mas[n][i + 1]) { int z; z = mas[n][i]; mas[n][i] = mas[n][i + 1]; mas[n][i + 1] = z; i = -1; } } }//сортировка ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ строки void Spisok::sort2(int n) { for (int i = 0; i < size1 - 1; i++) { if (mas[i][n] > mas[i + 1][n]) { int z; z = mas[i][n]; mas[i][n] = mas[i + 1][n]; mas[i + 1][n] = z; i = -1; } } }//сортировка ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ столбца 

Main file

  #include "Spisok.h" #include <iostream> #include <stdio.h> #include <locale.h> #include <windows.h> using namespace std; int main() { setlocale(LC_ALL, "Russian"); int i = 1, n = 1, m = 1; Spisok *T = nullptr; while (i != 0) { cout << endl << "ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ"; cout << endl << "1)CΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ"; cout << endl << "2)ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ число ΠΏΠΎ полоТСнию"; cout << endl << "3)ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ"; cout << endl << "4)ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ строкС"; cout << endl << "5)ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ столбцу"; cout << endl << "6)Π—Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ" << endl; int b; cin >> b; switch (b) { case 1: { cout << endl << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ списка\n"; int n, m; cin >> n >> m; T = new Spisok(n, m); break; } case 2: { if (T == nullptr) std::cout << "НС Π·Π°Π΄Π°Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹!!!\n"; else { cout << endl << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅\n"; int n, m; cin >> n >> m; cout << "\nЧисло Π² этом ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ =" << T->get(n, m); } break; } case 3: { if (T == nullptr) std::cout << "НС Π·Π°Π΄Π°Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹!!!\n"; else T->get(); break; } case 4: { if (T == nullptr) std::cout << "НС Π·Π°Π΄Π°Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹!!!\n"; else { cout << endl << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ строки \n"; int z; cin >> z; T->sort1(z - 1); } break; } case 5: { if (T == nullptr) std::cout << "НС Π·Π°Π΄Π°Π½Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹!!!\n"; else { cout << endl << "Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ столбца\n"; int z; cin >> z; T->sort2(z - 1); } break; } case 6: { i = 0; break; } default: { cout << "Π’Π°ΠΊΠΎΠΉ Ρ„-Ρ†ΠΈΠΈ Π½Π΅Ρ‚, ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠΉΡ‚Π΅ снова"; break; } } } return 0; } 

Help to implement the class inheritor containing additional methods for calculating the scalar product of two specified rows and / or two specified columns. Thank you very much in advance!!!

  • why the matrix, the list? What exactly help? What did not work out? - Grundy

1 answer 1

Something like this:

 class CustomSpisok : public Spisok{ public: CustomSpisok(int x, int y): Spisok(x, y) {} int mulColumns(int x, int y) const{ //РСализация умноТСния столбцов } int mulRows(int x, int y) const{ //РСализация произвСдСния строк } }; 

But you have other problems in the code. First, you allocate memory in the constructor through new , but do not free it in the destructor. It turns out a memory leak. The destructor should look like this:

 Spisok::~Spisok(){ for (int i = 0; i < size1; i++){ delete[] mas[i]; } delete mas; } 

Secondly, the base class destructor must always be declared virtual.

 virtual ~Spisok(); 

If you want to know more about why, you can read rule 7 in the book by Scott Myers Effective C ++, well, or arrange it as another question.