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

Передача массива в метод класса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
slaaavyn
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 6
07.03.2013, 00:49     Передача массива в метод класса #1
Здравствуйте уважаемые форумчане. Намекните пожалуйста (если можно с примером) как решить следующую проблему: У меня есть двухмерный символьный массив 15х20
C++
1
char map[width][height];
и есть класс с методом который должен использовать этот массив.
Как мне передать массив в метод класса?
Заранее благодарен за ответ.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 01:11     Передача массива в метод класса #2
Статический двумерный массив
C++
1
2
3
4
5
6
class Test
{
...
void Print(char map[][],int width,int height )
...
};
Динамический двумерный
C++
1
2
3
4
5
6
class Test
{
...
void Print(char **map,int width,int height )
...
};
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.03.2013, 01:34     Передача массива в метод класса #3
точно также как и в обычную функцию. Если ты решил изучать С++, перескакивая с темы на тему, лучше брось это.
Массивы передаются указателем на первый элемент.
Цитата Сообщение от egor2116 Посмотреть сообщение
Статический двумерный массив
Динамический двумерный
ИМХО, разницы никакой. Можно поменять местами подписи и передавать хоть статический, хоть динамический. Или ты ради того, чтоб передать динамический массив, объявишь второй раз другую функцию?
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 01:42     Передача массива в метод класса #4
объявишь второй раз другую функцию?
Нет, лишь привожу человеку пример вариантов синтаксиса
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
07.03.2013, 01:53     Передача массива в метод класса #5
Цитата Сообщение от egor2116 Посмотреть сообщение
Нет, лишь привожу человеку пример вариантов синтаксиса
Ясно, просто это прозвучало как "первый вариант работает только для статических массивов, второй только для динамических"
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 02:00     Передача массива в метод класса #6
Ясно, просто это прозвучало как
Извеняюсь за туман.
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 438
07.03.2013, 02:05     Передача массива в метод класса #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
 
class A {
public:
    template <int N, int M>
    void func(char (&map)[N][M]) {
        std::cout << "N=" << N << ", M=" << M << std::endl;
    }
};
 
 
int main() {
    char map[10][20];
    A a;
    a.func(map);
}
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
07.03.2013, 02:11     Передача массива в метод класса #8
Да, определенно человек который испытывает проблему при передаче массива в метод, не смутится увидив это
C++
1
2
 template <int N, int M>
    void func(char (&map)[N][M]) {
slaaavyn
0 / 0 / 0
Регистрация: 05.01.2013
Сообщений: 6
07.03.2013, 10:22  [ТС]     Передача массива в метод класса #9
Всем огромное спасибо. Разобрался
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.03.2013, 15:32     Передача массива в метод класса
Еще ссылки по теме:

C++ Передача переменных из функции в метод класса
Передача define в метод класса C++
Передача массива одного класса в другой С++ C++

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

Или воспользуйтесь поиском по форуму:
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
11.03.2013, 15:32     Передача массива в метод класса #10
Цитата Сообщение от egor2116 Посмотреть сообщение
C++
1
void Print(char map[][],int width,int height )
Это вообще не сработает. Да, записи int foo[] и int *foo в списке формальных параметров функции взаимозаменяемы, но про int foo[][] и int **foo этого сказать нельзя. Писать int foo[][] вообще нельзя, поскольку компилятор обязан знать все размерности массива, кроме первой (они обязаны быть константами времени компиляции).
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Можно поменять местами подписи и передавать хоть статический, хоть динамический
Неверно. В функцию, принимающую type arr[][SIZE], передать двойной указатель нельзя. То же самое наоборот, в функцию, принимающую type **arr, не получится передать статический двумерный массив.

Всё это вытекает из того, что указатель на статический двумерный массив имеет тип не type **, а type (*)[SIZE], именно такой, с учётом SIZE. Таким образом, указатели на массивы int arr1[10][10] и int arr2[10][20] имеют на самом деле разные типы, и они несовместимы.
Yandex
Объявления
11.03.2013, 15:32     Передача массива в метод класса
Ответ Создать тему
Опции темы

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