Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80

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

04.05.2013, 21:49. Показов 1376. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.05.2013, 21:49
Ответы с готовыми решениями:

Указатели на функции, прототипы функций и классы
Если написать так: class MyClass { int f1(...); unsigned long int f2(int parameter) { ... } unsigned long int...

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

Классы и указатели
Добрый день, у меня такой вопрос. Вот есть две идентичные записи. Client * NewClient = new Client; Client NewClient; Где Client -...

13
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.05.2013, 00:11
Vahram1995, что Вам нужно сделать по сути?
0
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
05.05.2013, 15:26  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Vahram1995, что Вам нужно сделать по сути?
Вот задание.
Составить описание объекта, обеспечивающего размещение матрицы произвольного размера с возможностью изменения числа строк и столбцов, вывода на экран подматрицы любого размера и всей матрицы.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
05.05.2013, 22:22
Vahram1995, Вы хотели бы разобраться в том, что написали или Вам нужен готовый код?
0
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
06.05.2013, 16:42  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Vahram1995, Вы хотели бы разобраться в том, что написали или Вам нужен готовый код?
Я хочу понять что я делаю не правильно.
Скажем в конструкторе можно создать переменную типа класса?
class abs{...};
abs::abs()
{ abs n;}//???
И правильно ли я передаю двумерный динамический массив с конструктора в другую функцию?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.05.2013, 16:57
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Скажем в конструкторе можно создать переменную типа класса?
Можно. Главное, чтобы не было зацикливания. Т.е. скажем в конструкторе с параметром создавать объект конструктором по умолчанию. Хотя, не очень понятно, зачем это нужно.
Цитата Сообщение от Vahram1995 Посмотреть сообщение
И правильно ли я передаю двумерный динамический массив с конструктора в другую функцию?
В какой строке кода это происходит?
1
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
06.05.2013, 17:04  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
В какой строке кода это происходит?
51 строке
Цитата Сообщение от Tulosba Посмотреть сообщение
Т.е. скажем в конструкторе с параметром создавать объект конструктором по умолчанию.
Не очень понятно что вы хотите сказать?
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
06.05.2013, 17:16
Цитата Сообщение от 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 / 1
Регистрация: 20.01.2013
Сообщений: 80
20.05.2013, 22:43  [ТС]
Цитата Сообщение от Tulosba Посмотреть сообщение
Вы хотите скопировать один объект в другой? Если да, то для этого предназначены копирующий конструктор и оператор присваивания.
Извините что снова обращаюсь к Вам спустя столько времени. Не могли бы Вы привести пример где с конструктора класса объекты из цикла передаются в конструктор копирования (желательно без перегрузок операций) (или показать какой-то сайт, где можно обо всем прочитать).
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.05.2013, 10:54
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Не могли бы Вы привести пример где с конструктора класса объекты из цикла передаются в конструктор копирования
Если честно, ничего не понял Если это можно как-то соотнести с Вашей задачей (матрицами), опишите словами, что Вы хотели бы сделать с матрицами. Может быть так будет понятнее.
0
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
21.05.2013, 12:14  [ТС]
Мне учитель сказал что в конструкторе не нужно выводить массив (чтобы конструктор выполнял математические действия). Но нужно этот же массив вывести в другой функции. А Вы написали что для этого предназначен конструктор копирования. Но примеров как массив перенести в конструктор копирования я не нашел.
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.05.2013, 12:20
Цитата Сообщение от Vahram1995 Посмотреть сообщение
выводить массив
На экран? Конечно не нужно. Конструктор создает объект. Для вывода на экран можно реализовать метод print() (или перегрузить operator<<). В данном случае никакого копирования (и копирующего конструктора в том числе) не требуется.
1
 Аватар для Vahram1995
1 / 1 / 1
Регистрация: 20.01.2013
Сообщений: 80
21.05.2013, 12:35  [ТС]
Tulosba, Спасибо. Сейчас буду читаю про метод print()
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
21.05.2013, 12:52
Цитата Сообщение от Vahram1995 Посмотреть сообщение
Сейчас буду читаю про метод print()
Читайте лучше про operator<<. print - это просто название. А назвать можно как угодно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.05.2013, 12:52
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru