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

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

Восстановить пароль Регистрация
 
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 18:02     Передать значение члена класса потомку #1
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 постоянно выдает ошибки.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12079 / 6940 / 782
Регистрация: 27.09.2012
Сообщений: 17,215
Записей в блоге: 2
Завершенные тесты: 1
05.10.2013, 18:06     Передать значение члена класса потомку #2
Цитата Сообщение от ivan92 Посмотреть сообщение
Visual studio постоянно выдает ошибки.
Какие? Где? Сколько стоят? Почему так дорого?
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"
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
05.10.2013, 18:15     Передать значение члена класса потомку #4
X.arr[i][j]; - невозможно обратиться к protected член, объявленному в классе "matrix"
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 - потомок, конструктор - его метод.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 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;
А ты точно уверен что они должны быть статическими? Просто это не совсем логично..
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;
А ты точно уверен что они должны быть статическими? Просто это не совсем логично..
По повод статических переменных - да, матрицы имееют заданную одинаковую размерность, и инициализируются они через конструктор прекрасно. Мне нужно узнать просто как передать значения массива одного класса другому классу(наследнику).
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 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;
};
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 19:13  [ТС]     Передать значение члена класса потомку #9
Можно, но во-первых преподаватель говорит, что дружественный класс - симптом ошибки при проектировании, во-вторых(самое важное) - тема лабораторной - наследование. Вот и стараюсь его применить.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
05.10.2013, 19:16     Передать значение члена класса потомку #10
А тебе в конструктор solution надо именно объект класса matrix передавать?
zenw
154 / 110 / 3
Регистрация: 12.06.2013
Сообщений: 168
05.10.2013, 19:22     Передать значение члена класса потомку #11
Наиболее логично было бы добавить в matrix конструктор, который принимает другую матрицу, и в конструкторе solution вызывать именно его. Ну и да, как уже заметили, немного странно, что конструктор solution принимает не другой solution, а matrix.
castaway
Эксперт С++
4867 / 3006 / 370
Регистрация: 10.11.2010
Сообщений: 11,055
Записей в блоге: 10
Завершенные тесты: 1
05.10.2013, 19:22     Передать значение члена класса потомку #12
Что-то я сам себя запутал.. Тут все просто.
C++
1
2
3
4
class solution : public matrix {
public:
  solution( matrix m ) : matrix( m ) {}
};
При этом тебе надо объявить конструктор для matrix.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2013, 19:44     Передать значение члена класса потомку
Еще ссылки по теме:

C++ Инициализация static члена класса
C++ Теряю значение private члена класса
Инициализация переменной члена класса C++
C++ Запретить наследование члена базового класса
C++ Описание тела функии-члена класса

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

Или воспользуйтесь поиском по форуму:
ivan92
0 / 0 / 1
Регистрация: 30.01.2013
Сообщений: 188
05.10.2013, 19:44  [ТС]     Передать значение члена класса потомку #13
Ну по идее другого выхода я не вижу. Просто в объекте класса matrix есть двумерный массив, его значения надо скопировать в аналогичный массив потомка.
Yandex
Объявления
05.10.2013, 19:44     Передать значение члена класса потомку
Ответ Создать тему
Опции темы

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