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

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

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

Передать значение члена класса потомку - C++

05.10.2013, 18:02. Просмотров 435. Ответов 12
Метки нет (Все метки)

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
93
94
95
96
#include <iostream>
#include <locale.h>
#include <fstream>
#include <conio.h>
#include <ctime>
 
using namespace std;
 
class matrix
{
protected:
  static int n, m;
  int arr[50][50];
  int h[50],v[50];
  int p;
public:
  bool almost_multiple();
  bool multiple();
  void sum();
  matrix();
  void get_arr();
};
 
int matrix::n;
int matrix::m;
 
bool matrix::multiple()
{
 for(int i=0;i<n;i++)
   for(int j=0;j<m;j++)
     if(arr[i][j]%p!=0) return false;
 return true;
}
 
bool matrix::almost_multiple()
{
 for(int i=0;i<n;i++)
   if(h[i]%p!=0) return false;
 for(int j=0;j<m;j++)
   if(v[j]%p!=0) return false;
 return true;
}
 
void matrix::sum()
{
  for(int i=0;i<n;i++) //Сумма строк
  {
    h[i]=0;
    for(int j=0;j<m;j++) h[i]=h[i]+arr[i][j];
  }
  for(int j=0;j<m;j++)   //Сумма столбцов
  {
    v[j]=0;
    for(int i=0;i<n;i++) h[j]=h[j]+arr[i][j];
  }
}
 
matrix::matrix()
{
  cout<<"Введите n:"; cin>>n;
  cout<<"Введите m:"; cin>>m;
  for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
      arr[i][j]=-100+rand()%200;
};
 
void matrix::get_arr()
{
  for(int i=0;i<n;i++)
  {  
    cout<<endl;
    for(int j=0;j<m;j++)
      cout<<arr[i][j]<<" ";
  }
};
 
class solution:public matrix
{
public:
  solution(matrix);
};
 
solution::solution(matrix X)
{
  for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
      this->arr[i][j]=X.arr[i][j];
}
 
int main()
{
  srand(time(NULL));
  setlocale(LC_CTYPE,"Russian");
  matrix A;
  A.get_arr();
}
Есть массив в классе matrix, он заполняется случайными значениями. Далее создается потомок этого класса solution. Он должен принять значения массива arr из определенного экземпляра класса, чтобы потом с ними работать(внутри экземпляра класса solution). Сделать это собираюсь в конструкторе. Visual studio постоянно выдает ошибки.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2013, 18:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Передать значение члена класса потомку (C++):

значение по дефолту члена класса - C++
всем привет. вот работаю с таким кодом #include &lt;stdlib.h&gt; #include &lt;string&gt; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Теряю значение private члена класса - C++
#include &quot;Node.h&quot; template &lt;class _Compare, typename K, typename V&gt; class My_Tree { public: My_Tree(){}; My_Tree(K key, V...

Почему не изменяется значение члена класса - C++
Инструкция по запуску: &lt;имя.exe&gt; &lt;inputfilename&gt; &lt;outputfilename&gt; &lt;-s|-i&gt; &lt;-a|-d&gt; В конструкторе (FileSorter.cpp, line 21) я изменяю...

Не удается передать значение членам класса - C++
Доброе время суток, возникла проблема, при создании класса добавил функцию, с помощью которой я задаю значение переменных x,y и строки...

Передать значение из одного класса в другой через указатель - C++
Я не могу додуматься что тут не так class Car { private: int weight; public: Car(int w) { weight=w; }

Как передать значение функции класса в другую функцию? - C++
имеется класс class Test { public: int getB() { return B; } void setB(int b) { B = b; } private: ...

12
Croessmah
Ушел
13770 / 8020 / 924
Регистрация: 27.09.2012
Сообщений: 19,751
Записей в блоге: 3
Завершенные тесты: 1
05.10.2013, 18:06 #2
Цитата Сообщение от ivan92 Посмотреть сообщение
Visual studio постоянно выдает ошибки.
Какие? Где? Сколько стоят? Почему так дорого?
0
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 18:10  [ТС] #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Какие? Где? Сколько стоят? Почему так дорого?
В общем ругается так.
matrix::arr: невозможно обратиться к protected член, объявленному в классе "matrix"
1> (13): см. объявление "matrix::arr"
1> (10): см. объявление "matrix"
0
I.M.
566 / 549 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
05.10.2013, 18:15 #4
X.arr[i][j]; - невозможно обратиться к protected член, объявленному в классе "matrix"
0
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 18:22  [ТС] #5
Цитата Сообщение от I.M. Посмотреть сообщение
X.arr[i][j]; - невозможно обратиться к protected член, объявленному в классе "matrix"
И? Как мне этого избавиться? Делать массив public совсем не хочется. По идее же должно все работать. protected доступен потомкам, solution - потомок, конструктор - его метод.
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
05.10.2013, 18:41 #6
Ну у тебя глупость вообще написана. У тебя класс solution уже имеет переменные, унаследованные от matrix. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
 
class solution: public matrix
{
public:
  solution() {
    for(int i=0;i<n;i++)
      for(int j=0;j<m;j++)
        arr[i][j] = i + j;
  }
};
 
int main()
{
    solution s;
    s.get_arr();
}
А. Нет. Тут похоже в другом проблема..
Во-первых статические переменные n и m нужно инициализировать в 24-й и 25-й строках:
C++
1
2
int matrix::n = 10;
int matrix::m = 10;
А ты точно уверен что они должны быть статическими? Просто это не совсем логично..
0
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 18:49  [ТС] #7
Цитата Сообщение от castaway Посмотреть сообщение
Ну у тебя глупость вообще написана. У тебя класс solution уже имеет переменные, унаследованные от matrix. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
...
 
class solution: public matrix
{
public:
  solution() {
    for(int i=0;i<n;i++)
      for(int j=0;j<m;j++)
        arr[i][j] = i + j;
  }
};
 
int main()
{
    solution s;
    s.get_arr();
}
А. Нет. Тут похоже в другом проблема..
Во-первых статические переменные n и m нужно инициализировать в 24-й и 25-й строках:
C++
1
2
int matrix::n = 10;
int matrix::m = 10;
А ты точно уверен что они должны быть статическими? Просто это не совсем логично..
По повод статических переменных - да, матрицы имееют заданную одинаковую размерность, и инициализируются они через конструктор прекрасно. Мне нужно узнать просто как передать значения массива одного класса другому классу(наследнику).
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
05.10.2013, 18:55 #8
Ну тогда тебе просто надо объявить класс solution дружественным для matrix. (предпоследняя строка)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class matrix
{
protected:
  static int n, m;
  int arr[50][50];
  int h[50],v[50];
  int p;
public:
  bool almost_multiple();
  bool multiple();
  void sum();
  matrix();
  void get_arr();
 
    friend class solution;
};
0
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 19:13  [ТС] #9
Можно, но во-первых преподаватель говорит, что дружественный класс - симптом ошибки при проектировании, во-вторых(самое важное) - тема лабораторной - наследование. Вот и стараюсь его применить.
0
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
05.10.2013, 19:16 #10
А тебе в конструктор solution надо именно объект класса matrix передавать?
0
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
05.10.2013, 19:22 #11
Наиболее логично было бы добавить в matrix конструктор, который принимает другую матрицу, и в конструкторе solution вызывать именно его. Ну и да, как уже заметили, немного странно, что конструктор solution принимает не другой solution, а matrix.
1
castaway
Эксперт С++
4924 / 3032 / 372
Регистрация: 10.11.2010
Сообщений: 11,085
Записей в блоге: 10
Завершенные тесты: 1
05.10.2013, 19:22 #12
Что-то я сам себя запутал.. Тут все просто.
C++
1
2
3
4
class solution : public matrix {
public:
  solution( matrix m ) : matrix( m ) {}
};
При этом тебе надо объявить конструктор для matrix.
1
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 19:44  [ТС] #13
Ну по идее другого выхода я не вижу. Просто в объекте класса matrix есть двумерный массив, его значения надо скопировать в аналогичный массив потомка.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2013, 19:44
Привет! Вот еще темы с ответами:

Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка - C++
Создать конструктор копий и оператор присваивания для класса компьютер и члена класса марка. Всем огромное спасибо за помощь! |

Сам вопрос: почему функция-член одного класса не вызывается из функции-члена другого класса? - C++
//Щас всё объясню. Так, имеем два класса, в одном я определил функцию-член. Все конструкторы и прочее //опущены для уменьшения кода ...

Определение члена класса - C++
Выдает ошибку типа оператор += не является членом класса Distance. ни могу понять include &lt;iostream&gt; using namespace std; ...

Инициализация static члена класса - C++
Добрый вечер! Есть класс, в нём в private реализован ещё один + это всё шаблоны. Во вложенном классе есть static указатель на переменную...


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

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

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