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

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

Войти
Регистрация
Восстановить пароль
 
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
#1

Классы, указатели и функции? - C++

04.05.2013, 21:49. Просмотров 823. Ответов 13
Метки нет (Все метки)

Помогите пожалуйста разобраться в программе.
Нужно из конструктора класса передать адреса в другую функцию ,разадресовывать и поставить в новый массив(+ записать значения)
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
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
85
86
87
88
89
90
91
92
//oop-class-С++
 #include <windows.h>
 #include <iostream>
 #include <stdlib.h>
 #include <math.h>
 #include <ctime>
 #include <iomanip>
 using namespace std;
 
 class matrica   //класс
  {
     int a, b, *m;
     int **matr;               //указатель на указатель
     public:
         matrica(int, int);   
        ~matrica();
     int newmatrica(int);
  };        
       
   int matrica::newmatrica(m)
  {
     for (int stroka = 0; stroka < a; ++stroka)
       {
         for (int stolbec = 0; stolbec < b; ++stolbec)
           {
                matr [stroka][stolbec] = *m;
                cout << setw(5) << matr [stroka][stolbec];
            }
            cout << endl;
       }
       cout << endl;              
  }           
             
  matrica::matrica (int stroka, int stolbec)    //конструктор
  {     
        a = stroka;
        b = stolbec;
       
           matr = new int*[a];              //создает столбец указателей
       for (stroka = 0; stroka < a; ++stroka)
           matr [stroka] = new int[b];      //создает строки из столбца
        
           srand(time(NULL));
           
       for (stroka = 0; stroka < a; ++stroka)
       {
           for (stolbec = 0; stolbec < b; ++stolbec)
           {
                matr [stroka][stolbec] = rand() % 100;
                m = &matr [stroka][stolbec];
                newmatrica (m);
            }
            cout << endl;
       }
       cout << endl;
      
    
  }   
  
  matrica::~matrica()         //деструктор
  {
         for (int stroka = 0; stroka < a; ++stroka)
                delete [] matr [stroka];
         delete [] matr;
  }
      
 int main()   //функция main
 {   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
     
    int stroka, stolbec;
    
    cout << "число строк = ";
     cin >> stroka;
    cout << endl;
    cout << "число столбцов = ";
     cin >> stolbec;
    cout << endl; 
    
    if (stroka > 0 && stolbec > 0)
    {
      matrica konstruktor(stroka, stolbec);
    }
    else
    {
      cout << "таблица не может быть отрицательным или равняться нулю!!!" << endl;
    }
    cout << endl;  
    system("pause");
    return 0;
 }
Добавлено через 1 час 23 минуты
Кажется кое-что исправил но не все.
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
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
85
86
87
88
89
90
91
92
//oop
 #include <windows.h>
 #include <iostream>
 #include <stdlib.h>
 #include <math.h>
 #include <ctime>
 #include <iomanip>
 using namespace std;
 
 class matrica   //класс
  {
     int a, b;
     int **matr;               //указатель на указатель
     public:
         matrica(int, int);   
        ~matrica();
     int newmatrica(int);
  };        
       
   int matrica::newmatrica(int *m)
  {
     for (int stroka = 0; stroka < a; ++stroka)
       {
         for (int stolbec = 0; stolbec < b; ++stolbec)
           {
                matr [stroka][stolbec] = *m;
                cout << setw(5) << matr [stroka][stolbec];
            }
            cout << endl;
       }
       cout << endl;              
  }           
             
  matrica::matrica (int stroka,int stolbec)    //конструктор
  {     matrica set;
        a = stroka;
        b = stolbec;
       
           matr = new int*[a];              //создает столбец указателей
       for (stroka = 0; stroka < a; ++stroka)
           matr [stroka] = new int[b];      //создает строки из столбца
        
           srand(time(NULL));
           
       for (stroka = 0; stroka < a; ++stroka)
       {
           for (stolbec = 0; stolbec < b; ++stolbec)
           {
                matr [stroka][stolbec] = rand() % 100;
                m = &matr [stroka][stolbec];
                set.newmatrica (int *m);
           }
            cout << endl;
       }
       cout << endl;
      
    
  }   
  
  matrica::~matrica()         //деструктор
  {
         for (int stroka = 0; stroka < a; ++stroka)
                delete [] matr [stroka];
         delete [] matr;
  }
      
 int main()   //функция main
 {   
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
     
    int stroka, stolbec;
    
    cout << "число строк = ";
     cin >> stroka;
    cout << endl;
    cout << "число столбцов = ";
     cin >> stolbec;
    cout << endl; 
    
    if (stroka > 0 && stolbec > 0)
    {
      matrica konstruktor(stroka, stolbec);
    }
    else
    {
      cout << "таблица не может быть отрицательным или равняться нулю!!!" << endl;
    }
    cout << endl;  
    system("pause");
    return 0;
 }
Добавлено через 25 минут
Как с конструктора класса передать адреса массива в другую функцию?

Добавлено через 23 часа 55 минут
???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.05.2013, 21:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Классы, указатели и функции? (C++):

Написать код используя массивы, указатели, виртуальные функции, наследование, классы и т.д - C++
Короче нужно сделать код, программу которая будет использовать массивы, указатели, виртуальные функции, наследование, классы, конструкторы,...

Классы и указатели - C++
Пишет:&quot;Отсутствуют экземпляры конструктора &quot;Pet::Pet&quot;, соответствующие списку аргументов типы аргументов:(char*)&quot;. #include...

Указатели на Классы - C++
class B { public: int x; B() { // Конструктор по умолчанию x = 4; } }; class D : public B { // Производный класс ...

Указатели на классы - C++
class A {}; class B : public A {}; int main() { A *ob1=new B; B *ob2=new B;

Ссылки. Указатели. Классы - C++
Здравствуйте. Пишу базу данных, и наткнулся на проблему с ссылкой. Код ниже, как ее исправить. int Base::CmpGrN(const Base a, const Base...

Перечисление,указатели, классы - C++
Здравствуйте, можете скинуть или написать простые задачи на тему &quot;Перечисление,указатели, классы&quot;

13
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.05.2013, 00:11 #2
Vahram1995, что Вам нужно сделать по сути?
0
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
05.05.2013, 15:26  [ТС] #3
Цитата Сообщение от Tulosba Посмотреть сообщение
Vahram1995, что Вам нужно сделать по сути?
Вот задание.
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
05.05.2013, 22:22 #4
Vahram1995, Вы хотели бы разобраться в том, что написали или Вам нужен готовый код?
0
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
06.05.2013, 16:42  [ТС] #5
Цитата Сообщение от Tulosba Посмотреть сообщение
Vahram1995, Вы хотели бы разобраться в том, что написали или Вам нужен готовый код?
Я хочу понять что я делаю не правильно.
Скажем в конструкторе можно создать переменную типа класса?
class abs{...};
abs::abs()
{ abs n;}//???
И правильно ли я передаю двумерный динамический массив с конструктора в другую функцию?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.05.2013, 16:57 #6
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Скажем в конструкторе можно создать переменную типа класса?
Можно. Главное, чтобы не было зацикливания. Т.е. скажем в конструкторе с параметром создавать объект конструктором по умолчанию. Хотя, не очень понятно, зачем это нужно.
Цитата Сообщение от Vahram1995 Посмотреть сообщение
И правильно ли я передаю двумерный динамический массив с конструктора в другую функцию?
В какой строке кода это происходит?
1
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
06.05.2013, 17:04  [ТС] #7
Цитата Сообщение от Tulosba Посмотреть сообщение
В какой строке кода это происходит?
51 строке
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.е. скажем в конструкторе с параметром создавать объект конструктором по умолчанию.
Не очень понятно что вы хотите сказать?
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
06.05.2013, 17:16 #8
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Не очень понятно что вы хотите сказать?
https://ideone.com/EwG1D9
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
#include <iostream>
using namespace std;
 
struct A
{
    A() // Конструктор по умолчанию (т.е. без параметров)
    {
        cout << "def ctor" << endl;        
        A a = A(0); // Создаем объект такого же класса, используя другой конструктор 
        this->v = a.v;
    }
    A( int v ) // Конструктор с параметром 
    {
        cout << "param ctor" << endl;
        //A a; // Если убрать комментарий, то будет зацикливание
        this->v = v;
    }
private:
   int v; 
};
 
int main() {
 
    A a;
 
        return 0;
 
}
Цитата Сообщение от Vahram1995 Посмотреть сообщение
51 строке
Есть честно, это всё довольно криво. Вы хотите скопировать один объект в другой? Если да, то для этого предназначены копирующий конструктор и оператор присваивания.
0
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
20.05.2013, 22:43  [ТС] #9
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы хотите скопировать один объект в другой? Если да, то для этого предназначены копирующий конструктор и оператор присваивания.
Извините что снова обращаюсь к Вам спустя столько времени. Не могли бы Вы привести пример где с конструктора класса объекты из цикла передаются в конструктор копирования (желательно без перегрузок операций) (или показать какой-то сайт, где можно обо всем прочитать).
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 10:54 #10
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Не могли бы Вы привести пример где с конструктора класса объекты из цикла передаются в конструктор копирования
Если честно, ничего не понял Если это можно как-то соотнести с Вашей задачей (матрицами), опишите словами, что Вы хотели бы сделать с матрицами. Может быть так будет понятнее.
0
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
21.05.2013, 12:14  [ТС] #11
Мне учитель сказал что в конструкторе не нужно выводить массив (чтобы конструктор выполнял математические действия). Но нужно этот же массив вывести в другой функции. А Вы написали что для этого предназначен конструктор копирования. Но примеров как массив перенести в конструктор копирования я не нашел.
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 12:20 #12
Цитата Сообщение от Vahram1995 Посмотреть сообщение
выводить массив
На экран? Конечно не нужно. Конструктор создает объект. Для вывода на экран можно реализовать метод print() (или перегрузить operator<<). В данном случае никакого копирования (и копирующего конструктора в том числе) не требуется.
1
Vahram1995
1 / 1 / 0
Регистрация: 20.01.2013
Сообщений: 74
21.05.2013, 12:35  [ТС] #13
Tulosba, Спасибо. Сейчас буду читаю про метод print()
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
21.05.2013, 12:52 #14
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Сейчас буду читаю про метод print()
Читайте лучше про operator<<. print - это просто название. А назвать можно как угодно.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2013, 12:52
Привет! Вот еще темы с ответами:

Указатели на производные классы - C++
Подскажите, как создать массив типа &quot;указатель на базовый класс&quot;, который будет содержать указатель указатели на производные...

Задача на классы и статические указатели - C++
Условие задачи: в любой момент времени можно получить последнего из могикан (объект класса), без использования отдельного экземпляра. Нужно...

Как можно решить? (классы, указатели) - C++
Имеется два класса: Support class Support { public: World* world; Pacman* pacman; ............. Support(World*...

Возвращение исходного массива (классы, указатели) - C++
нужно сделать так чтоб после каждого действия, при указатели на вызов функции output возвращался первоначально введенный массив. Например :...


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

Или воспользуйтесь поиском по форуму:
14
Yandex
Объявления
21.05.2013, 12:52
Ответ Создать тему
Опции темы

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