Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++/CLI
Войти
Регистрация
Восстановить пароль
 
IonDuck
0 / 0 / 1
Регистрация: 24.04.2012
Сообщений: 52
#1

Можно ли сделать поле класса параметром функции-члена этого же класса? - C++/CLI

03.06.2012, 07:56. Просмотров 755. Ответов 2
Метки нет (Все метки)

Здраствуйте.
C++
1
2
3
4
5
6
7
8
9
10
11
ref class MyClass
{
private:
    int i, j;
    array<array<int>^>^ X1; 
    array<array<int>^>^ X2; 
public:
    MyFunc(array<array<int>^>^ z)
{
        делаю чтото с матрицей z
}
теперь на button click event на Form1
C++
1
2
3
4
5
6
7
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
             {
                 MyVar->MyFunc(//Как сюда вставить матрицу X1, или X2);
             }
         }
Допустим в классе несколько полей.
Массив Х1, массив Х2.
Например я хочу сделать функцию, которая могла бы работать как с Х1, так и с Х2, по идее в объявлении функции нужно использовать параметр(в моем случае это
C++
1
MyFunc(array<array<int>^>^ z)
) а когда инициализирую функцию, то вместо матрицы Z нужно вписать матрицу Х1 или Х2, как это сделать???

Добавлено через 26 минут
Вот я сделал так и не работает.
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
//MLP.h
ref class MLP
{
private:
    int i, j;
    //array<array<int>^>^ Xt; // матрица входного слоя для тестирующей выборки
public:
    array<array<int>^>^ X; //массив входного слоя для обучающей выборки
    MLP(String^ str1, array<array<int>^>^ k)  //Конструктор
    {
        //считаем количество строк и столбцов в файле
        StreamReader^ sr1 = gcnew StreamReader(str1);
        i = 0; j = 0;
        String^ cln;
        while (( cln = sr1->ReadLine()) != nullptr)
        {
            j = cln->Split(gcnew array<Char> { '.', ' ', '!', '?', ',', '   ' })->Length;
            i++;
        }
        sr1->Close();
        //инициализируем массив (мусорными значениями)
        k = gcnew array<array<int>^>(i); 
        for (int z = 0; z < i; z++) 
        {
            k[z] = gcnew array<int>(j);
        }
        i=0; j=0;
        //заполняем массив
        StreamReader^ sr2 = gcnew StreamReader(str1);
        do
        {
            array<String^>^ words;  
            words = sr2->ReadLine()->Split(gcnew array<Char> { '.', ' ', '!', '?', ',', '   ' });
            for (j=0; j<words->Length; j++)
            {
                k[i][j] = Convert::ToInt32(words[j]);
            }
            i++;    
        }
        while ( i < k->Length );
        sr2->Close();
    }
C++
1
2
3
4
5
6
7
8
//Form1.h
private: System::Void button2_Click(System::Object^  sender, System::EventArgs^  e) 
         {
             if (openFileDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK)
             {
                 NN1 = gcnew MLP(openFileDialog1->FileName, NN1->X);
             }
         }
т.е. компилиться без ошибок, но когда запускаю конструктор, то выскакивает ошибка

Добавлено через 10 минут
Смысл программы в чем.
нажимаю кнопку 1, читаю файл 1 и создаю матрицу Х1
нажимаю кнопку 2, читаю файл 2 и создаю матрицу Х2
Я хочу использовать 1 и тот же констрктор, и в нем определять какую матрицу буду создавать, чтобы не делать для каждой матрици свои функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 07:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Можно ли сделать поле класса параметром функции-члена этого же класса? (C++/CLI):

String, как создать глобальный массив из экземпляров этого класса?
Добрый день. Начал недавно изучать Visual Studio. Хочу создать в класс одним...

Выделение памяти под массив класса (конструктор класса)
Здравствуйте программисты. Не могу понять, почему при использовании объекта...

Как сделать переменную класса глобальной (желательно внутри функции)
Здраствуйте. if (openFileDialog1-&gt;ShowDialog() ==...

Двумерный массив как поле класса
Здравствуйте! Подскажите, пожалуйста. Я хочу использовать вектор(stl) для...

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО!
Друзья! Почему так? #include &lt;windows.h&gt; #include &lt;iostream&gt; using namespace...

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

2
Евгений М.
1047 / 986 / 98
Регистрация: 28.02.2010
Сообщений: 2,858
Завершенные тесты: 2
04.06.2012, 13:42 #2
Цитата Сообщение от IonDuck Посмотреть сообщение
Например я хочу сделать функцию, которая могла бы работать как с Х1, так и с Х2, по идее в объявлении функции нужно использовать параметр(в моем случае это
Есть предложение создать конструткор, чей параметр имеет тип int.
Если i == 1, то использовать X1. Если i == 2, то использовать X2.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7004 / 3297 / 449
Регистрация: 04.12.2011
Сообщений: 9,130
Записей в блоге: 5
04.06.2012, 20:04 #3
Цитата Сообщение от IonDuck Посмотреть сообщение
MyVar->MyFunc(//Как сюда вставить матрицу X1, или X2);
Поля класса доступны всем (не константным) методам класса по их именам, и без каких либо дополнительных действий. Но если у Вас два поля и Вам необходимо выбрать одно или другое, по условиям находящимся за пределами класса, не лучше ли написать два разных метода и вызывать их в зависимости от этой внешней логики. Тогда конечно будет два метода-близнеца, работающие с разными полями (массивами в вашем случае).
2. Можно задать в классе переменную (если одно из двух - булеву) тогда перед вызовом метода внешний код должен будет её установить (даже если своими методами - кривовато (имхо), зато компактно). А метод анализируя её обращается к нужному полю (массиву).
3. Оставить в классе один массив и пользоваться структурой или классом из двух экземпляров. Так, вроде логичнее, но дело вкуса.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2012, 20:04
Привет! Вот еще темы с решениями:

Где размещать объявления класса, чтобы объекты этого класса можно объявлять в нескольких Form
Вопрос тупой. Так получилось, что надо написать прогу в Visual C# вместо...

Как сделать членом класса экземпляр этого же класса
class Operation { public: bool type; //true = operation, false = number...

Возможно ли создание объекта шаблонного класса в функции этого класса?
Доброго времени суток, уважаемые форумчане :) Мне по лабам задали задание -...

Создание статической функции класса, которая принимает экземпляр этого же класса как объект
Привет. Есть такой код class Model { public: Model(); Model(int...


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

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

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