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

Указатель на поле типа char [] - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Разработать класс Matrix – матрица http://www.cyberforum.ru/cpp-beginners/thread1012274.html
Разработать класс Matrix – матрица. Размерность матрицы задавать в конструкторе. Реализовать метод доступа к элементам массива. Реализовать операции сложения, вычитания, умножения и транспонирования...
C++ Не найден .exe файл Только начал обучение С++ по учебнику Страуструпа. Загрузил Visual Studio Начал со стандартного "Hello. World!" Отладка проходит успешно, ошибок нет. Однако программа не запускается. ... http://www.cyberforum.ru/cpp-beginners/thread1012270.html
программа не работает так,как надо C++
задание: ввести количество чисел последовательности и числа последовательности. определить и вывести количество участков последовательности,на которых значения вводимых чисел не уменьшаются,а также...
C++ Тотальная обработка матриц!
Проверьте пожалуйста! Здесь нужно найти суму всех четных и нечетных чисел в матрице! void sumOfElement(int matr, int nRow, int nCol, int&sum1, int&sum2){ sum1 = 0; sum2 = 0; for(int i = 0;...
C++ Найти сумму четных отрицательных и сумму нечетных положительных элементов массива. http://www.cyberforum.ru/cpp-beginners/thread1012262.html
Помогите написать код на с++ Программа должна иметь пользовательское меню, которое позволяет: Заполнить массив и при этом вывести его на экран, выполнить операции над массивом и посмотреть...
C++ Разделить исходную строку на несколько строк длины K Помогите пожалуйста: Разделить исходную строку на несколько строк длины K. подробнее

Показать сообщение отдельно
Paket236
2 / 2 / 0
Регистрация: 16.08.2013
Сообщений: 52

Указатель на поле типа char [] - C++

19.11.2013, 18:39. Просмотров 550. Ответов 12
Метки (Все метки)

Всем добрый день!
Ситуация такая: есть класс, в нём есть поля типа char [] и метод, работающий с этими полями. Метод должен многократно по определённому алгоритму изменять эти поля.
Что я решил сделать: создать ещё один метод (process() ), который будет вызываться из вышеупомянутого метода (method() ) для обработки этих полей (txt1, txt2 и т.д.). Он каким-то образом будет принимать поле, обрабатывать и сохранять обратно.

Общий вид кода примерно такой:
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
#include <iostream>
using namespace std;
 
class A
{
public:
    char txt1[40];
    char txt2[35];
    char txt3[18];
 
    void method();
    void process();
};
 
void A::method()
{   // ...
    process();
    // ...
}
 
void A::process()
{
}
 
int main()
{
    A obA;
    obA.method();
 
    cin.get();
    return 0;
}

Попытался сделать так:

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
#include <iostream>
using namespace std;
 
class A
{
public:
    char txt1[40];
    char txt2[35];
    char txt3[18];
 
    void method();
    void process(char (A::*txt1)[40]);
};
 
void A::method()
{   // ...
    process(&A::txt1);                  // передаём адрес поля txt1
    // ...
}
 
void A::process(char (A::*txt1_)[40])   // инициализируем указатель на поле txt1
{   // ...
    (this->*txt1_)[1] = 'q';            // редактируем поле txt1 для текущего объекта
}
 
int main()
{
    A obA;
    obA.method();
 
    cin.get();
    return 0;
}

Но возникла проблема: приходится указывать размер массива. Как сделать так, чтобы размер определялся автоматически?
И ещё вопрос. Покажу на примере (добавил метод process2() ):

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
#include <iostream>
using namespace std;
 
class A
{
public:
    char txt1[40];
    char txt2[35];
    char txt3[18];
 
    void method();
    void process(char (A::*txt1)[40]);
    void process2(char *txt_);
};
 
void A::method()
{   // ...
    process(&A::txt1);                  // передаём адрес поля txt1
    process2(txt1);                     // передаём адрес строки txt1
    // ...
}
 
void A::process(char (A::*txt1_)[40])   // инициализируем указатель на char на поле txt1
{   // ...
    (this->*txt1_)[1] = 'q';            // редактируем поле txt1 для текущего объекта
}
 
void A::process2(char *txt1_)           // инициализируем указатель на char
{   // ...
    txt1_[1] = 's';                     // редактируем строку по адресу txt1_ (не для объекта!)
}
 
int main()
{
    A obA;
    obA.method();
 
    cin.get();
    return 0;
}

В методе process2() редактируется строка, которая является полем (т.е. редактируется без использования объекта). Так нормально делать? Метод process2() опасней метода process() ? В обоих случаях редактируется успешно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru