Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.08.2019
Сообщений: 1
1

Как правильно обратиться к элементам полиморфного вектора (с умным указателем)?

25.08.2019, 01:43. Показов 572. Ответов 2
Метки qt (Все метки)

Здравствуйте, по заданию нужно: создать абстрактный класс с функцией - норма, определить функцию для производных классов, создать в основной программе массив полиморфных объектов с виртуальной функцией норма и посчитать норму для 10 различных объектов.
Я, вроде как, более-менее все сделала ( не обращайте внимание на заполнение класса Complex_numbers), но при выполнении программы выводится только: "Hello world! Nice!Nice!Nice!" вместо значений, выводимых функцией norma.
Подскажите, пожалуйста, что и где нужно исправить для выполнения задания?


Primum.h:

#ifndef PRIMUM_H
#define PRIMUM_H

#include <iostream>
#include <vector>

using namespace std;

class Primum
{
public:
virtual void norma() =0;
};

class Complex_numbers: public Primum
{
double realp, mnemonicp, amplitude, angle;
public:
void norma();
Complex_numbers();
void print();
};

class Vector_of_10_elements: public Primum
{
vector <int> v[10];
public:
void norma();
Vector_of_10_elements();
void print();
};

class Matrix_2x2: public Primum
{
int ** matrix;
public:
void norma();
Matrix_2x2();
~Matrix_2x2();
void print();
};

#endif // PRIMUM_H


Primum.cpp :

#include <iostream>
#include "primum.h"
#include <cmath>

using namespace std;

Complex_numbers::Complex_numbers()
{
cout<<"Nice!";
}

void Complex_numbers:: print()
{
cout<<"Great!";
}

void Complex_numbers::norma()
{
cout<<"Fine!";
}

Vector_of_10_elements::Vector_of_10_elements()
{
for (int count=0;count<10;count++)
v[10].at(count)=rand()%201+(-100);
}

void Vector_of_10_elements::norma()
{
double result=0;
for (int count =0;count<10;count++)
result=result+abs(v[10].at(count));
result=sqrt(result);
cout<<result;
cout<<"hey";
}

void Vector_of_10_elements:: print()
{
for (int count=0;count<10;count++)
cout<<v[10].at(count)<<" ";
}

Matrix_2x2::Matrix_2x2()
{
matrix = new int* [2];
for (int count=0;count<2;count++)
matrix [count] = new int [2];
for (int i=0;i<2;i++)
{
for (int j=0;j<2;j++)
matrix[i][j]=rand()%201+(-100);
}
}

Matrix_2x2::~Matrix_2x2()
{
for (int count=0; count<2;count++)
delete [] matrix[count];
delete [] matrix;
}

void Matrix_2x2:: print()
{
for (int i=0;i<2;i++)
{
for (int j=0;j<2;j++)
{
cout<<matrix[i][j]<<" ";
}
cout<<endl;
}
}

void Matrix_2x2::norma()
{
int max=abs(matrix[0][0]);
for (int i=1;i<2;i++)
{
for (int j=1;j<2;j++)
{
if (abs(matrix[i][j])>max)
max=matrix[i][j];
}
cout<<max;
}
}


main.cpp :

#include <vector>
#include <memory>

using namespace std;

int main()
{
srand(time(0));
cout << "Hello World!" << endl;
vector <unique_ptr<Primum>> v;
v.push_back(unique_ptr<Complex_numbers> (new Complex_numbers));
v.push_back(unique_ptr<Complex_numbers> (new Complex_numbers));
v.push_back(unique_ptr<Complex_numbers> (new Complex_numbers));
v.push_back(unique_ptr<Vector_of_10_elements> (new Vector_of_10_elements));
v.push_back(unique_ptr<Vector_of_10_elements> (new Vector_of_10_elements));
v.push_back(unique_ptr<Vector_of_10_elements> (new Vector_of_10_elements));
v.push_back(unique_ptr<Matrix_2x2> (new Matrix_2x2));
v.push_back(unique_ptr<Matrix_2x2> (new Matrix_2x2));
v.push_back(unique_ptr<Matrix_2x2> (new Matrix_2x2));
v.push_back(unique_ptr<Matrix_2x2> (new Matrix_2x2));
for (int count=0; count<10;count++)
v.at(count)->norma();
return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2019, 01:43
Ответы с готовыми решениями:

Как достать значение из вектора с умным указателем?
vector&lt;shared_ptr&lt;int&gt;&gt;arr; arr.push_back(make_shared&lt;int&gt;(4)); auto it = arr.begin(); Как...

Проблема с умным указателем std::unique_ptr
здравствуйте. есть задание - написать небольшую простенькую игру, где есть базовый класс Unit,...

Как с указателем обратиться к 4му элементу массива
Имеем массив из 50 элементов. Как с помощью указателей обратиться к 4му элементу массива?

Как получить доступ к элементам массива работая с ним как с указателем и адресной арифметикой
int array = { {1,2,3}, {1,2},{1,2,3,4}, {1,2,3,4},{1,2,},}; for(int i = 0; i &lt; 25; i++) ...

2
бах-бах и в продакшен!
2979 / 1597 / 563
Регистрация: 23.09.2014
Сообщений: 4,930
Записей в блоге: 4
25.08.2019, 06:57 2
Цитата Сообщение от Droped Посмотреть сообщение
но при выполнении программы выводится только: "Hello world! Nice!Nice!Nice!" вместо значений, выводимых функцией norma.
для вывода значений используйте поток std::cout


Цитата Сообщение от Droped Посмотреть сообщение
void Complex_numbers:: print()
{
cout<<"Great!";
}
типа:
C++
1
2
3
4
5
6
void Complex_numbers:: print()
{
    cout<<"Great!";
    cout << v[0] << "\n";
...
}
и не забудьте вызвать print() в вашем main()
0
Комп_Оратор)
Эксперт по математике/физике
8719 / 4425 / 598
Регистрация: 04.12.2011
Сообщений: 13,256
Записей в блоге: 16
25.08.2019, 07:51 3
Droped,
-добавьте виртуальный деструктор в Primium
Если матрицу захардкодили 2x2 зачем её в куче делать на указателе int**? Лучше уж int matrix[2][2], если вектор векторов не хотите (тут лишь один размер пришлось бы дополнительно хранить, но это гибче).
Ну и реализовать нормировку нужно. Иначе всё будет nice/fine/great/cool/exelent etc, но хорошо не будет.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2019, 07:51

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Как обратиться к элементам ArrayList?
Как обратиться к элементам AraayList !?!? привожу код в аттаче!

Как обратиться к отмеченным элементам ListView
У ListView стоит параметр отображать чек боксы. Задача скопировать отмеченные файлы. что то...

Как обратиться к элементам формы по имени?
Здравствуйте. Есть 5 радиобуттонов, с названиями radioButton1 radioButton2 radioButton3...

Как обратиться к элементам управления на листе?
Товарищи, подскажите как можно обратиться к элементам управления combobox и comandbutton, которые...


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

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

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