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

Возврат указателя на строку из фукнции - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
usernet009
 Аватар для usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
12.05.2010, 17:25     Возврат указателя на строку из фукнции #1
Снова я пришел к вам со строками.
Читаю "Как программировать на С++" и там везде пишут про инкапсуляцию, сокрытие данных. Так чтоб мы типа создавали класс, и пользователю были доступны только ОТКРЫТЫЕ данные и фунции, а закрытые оставались закрытыми все время.

Так вот... Писал лабораторную работу подруге и встретился с тем, что у меня есть класс, описывающий какой то самолет. Один из закрытых данных этого класса - указатель на строку ( марка самолета ).
тапо такого
C++
1
2
3
4
5
6
7
Class Plane
{
public:
//какие то данные
private:
char *mark;
}
И мне нужно сделать фунцию которая вернула бы эту марку самолета.
Перво что пришло в голову, вернуть указатель на строку, типа вот так
C++
1
char *getMark(){ return mark ;}
НО !! Тогда ведь в программе появится ОТКРЫТЫЙ указатель на ЗАКРЫТЫЕ данные класса, и через него можно будет делать все, что угодно.
Вторая моя идея : создать временную статическую строку в функции, и вернуть указатель на нее. Но, динамически выделить размер строки не получится... это не очень хорошо.
Третья : создать временную динамическую строку в функции и вернуть указатель на нее, но... после использования функции прийдется очищать память оператором delete... это тоже не очень удобно

Почему то я разочаровался в возможности С++... и больше идей у меня не возникло, поэтому решил посоветоваться с вами. Каким образом лучше всего вернуть закрытую строку из класса ?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 17:30     Возврат указателя на строку из фукнции #2
используй объекты типа string и не парься, могу порыться найти пример, если хочешь.
usernet009
 Аватар для usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
12.05.2010, 17:34  [ТС]     Возврат указателя на строку из фукнции #3
Так и думал что про объекты string будет первый совет
А как без stringа ?
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 17:55     Возврат указателя на строку из фукнции #4
НО !! Тогда ведь в программе появится ОТКРЫТЫЙ указатель на ЗАКРЫТЫЕ данные класса, и через него можно будет делать все, что угодно.
Используй указатель для чтения в клиентской части программы и будет счастье.
К сведению:
при разработке класса строки допускается наличие оператора возражающего адрес начала строкового буфера. Даже оператор преобразование к char* в классе можно реализовать,
но это я вижу в твоем примере не нужно.

Добавлено через 15 минут
Вторая моя идея : создать временную статическую строку в функции, и вернуть указатель на нее. Но, динамически выделить размер строки не получится... это не очень хорошо.
Вот это уже и есть прописная истинная и не ничего особенного тут статический массив должен
быть заведо большего размер скажем 100 ну не будет же твоя динамическая строка больше
можешь даже стандартно выделять 50 символов для дин строки, хочешь пример покажу.
Roma_F
331 / 246 / 5
Регистрация: 13.12.2009
Сообщений: 589
12.05.2010, 18:28     Возврат указателя на строку из фукнции #5
Цитата Сообщение от usernet009 Посмотреть сообщение
Почему то я разочаровался в возможности С++...
смелое утверждение )

C++
1
2
3
4
5
6
7
8
class Plane
{
public:
    ...
    const char *getMark() const { return mark;}
private:
    char *mark;
};
Crudelis
Шаровик затейник
 Аватар для Crudelis
667 / 409 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
12.05.2010, 18:38     Возврат указателя на строку из фукнции #6
может так сделать
C++
1
2
3
4
5
6
7
8
9
10
11
12
class Plane
{
public:
    ...
char Show();
private:
    char *mark[50];
}obj;
char Plane::Show()
{
return mark;
}
а в main
C++
1
2
char m[50];
m=obj.Show();
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
12.05.2010, 18:43     Возврат указателя на строку из фукнции #7
Crudelis:
Можешь пояснить что то не вдуплю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2010, 21:06     Возврат указателя на строку из фукнции
Еще ссылки по теме:

C++ Возврат указателя
Возврат указателя на массив указателей C++
Вывод текста и указателя в одну строку C++

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

Или воспользуйтесь поиском по форуму:
usernet009
 Аватар для usernet009
24 / 24 / 1
Регистрация: 28.12.2009
Сообщений: 85
12.05.2010, 21:06  [ТС]     Возврат указателя на строку из фукнции #8
Ааа..... точно !! const !!! как же я забыл про указатель на константные данные....
Молодец Бьёрн, на все случаи жизни язык придумал.

Цитата Сообщение от Genius Ignat Посмотреть сообщение
Crudelis:
Можешь пояснить что то не вдуплю.
+1. Я что то тоже не пойму
Yandex
Объявления
12.05.2010, 21:06     Возврат указателя на строку из фукнции
Ответ Создать тему
Опции темы

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