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

Написать метод, чтобы получить ссылку на строку - поле класса - C++

Восстановить пароль Регистрация
 
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
29.04.2014, 23:13     Написать метод, чтобы получить ссылку на строку - поле класса #1
Есть класс,назову его Test. В нем элемент типа строка(простите за мой французкий) Test.Name .Надо с помощью какого нибудь метода, получить ссылку на эту строку.Я сделал так,но получается какая то билиберда :

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
class Test
{
    char Name[10];
    int n;          
public:
    Test::Test(const char *m_Name, int m);
    const char * ReturnName(const Test & t);
};
 
//ГЄГ®Г*Г±-Г°
Test::Test(const char *m_Name, int m)
{
    strcpy(Name, m_Name);
    n=m;
}
 
// Г*Г*äî âîçâðГ*ГІГЁГІГј ГіГЄГ*Г§Г*òåëü Г*Г* ñòðîêó Test.name
const char * Test::ReturnName(const Test & t)
{
    const char *pstr = new char;// ГіГЄГ*Г§Г*òåëü, ÷òîá ГҐГЈГ® ГўГҐГ°Г*ГіГІГј..
    pstr = t.Name;              // ïðèñâîèëè...    
    return pstr;                // ГўГҐГ°Г*óëè...    
}
 
int main()
{
    Test T1 ("abc", 123); // ñîçäГ*Гѕ îáúåêò T1
    const char *pch = new char;
    pch=T1.ReturnName(T1); // билиберда
 
    return 0;
}
вот тут const char * ReturnName(const Test & t) приходится обращаться так T1.ReturnName(T1) , вот как переписать чтоб не требовался аргумент?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 23:13     Написать метод, чтобы получить ссылку на строку - поле класса
Посмотрите здесь:

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! C++
C++ Указатель на метод и на поле класса
C++ Можно ли получить ссылку на экземпляр класса по полю этого экземпляра
Создать метод для класса, который бы вводил через консоль строку C++
C++ Как передать в метод класса ссылку на экземпляр
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
29.04.2014, 23:28     Написать метод, чтобы получить ссылку на строку - поле класса #2
C++
1
2
3
4
const char * Test::ReturnName()
{
    return Name; //здесь подразумевается (*this).Name
}
this-константный указатель на текущий объект (объект, который вызывает метод класса)
вообще возвращать указатель на внутренние данные класса во внешнюю функцию, как по мне, нехорошо, инкапсуляция нарушается. Цель метода скопировать строку Name во внешнюю функцию?
C++
1
 const char *pch = new char;
вот это тоже ни к чему здесь, так вы блок в динамической памяти выделяете и присваиваете его адрес указателю pch, а потом вы присваиваете указателю другой адрес, теряя старый, не освободив память, на которую он указывает
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
29.04.2014, 23:37  [ТС]     Написать метод, чтобы получить ссылку на строку - поле класса #3
из массива,каждый Name на экран вывести

Добавлено через 1 минуту
Кликните здесь для просмотра всего текста
Цитата Сообщение от Denis123456789 Посмотреть сообщение
C++
1
2
3
4
const char * Test::ReturnName()
{
    return Name; //здесь подразумевается (*this).Name
}
this-константный указатель на текущий объект (объект, который вызывает метод класса)
вообще возвращать указатель на внутренние данные класса во внешнюю функцию, как по мне, нехорошо, инкапсуляция нарушается. Цель метода скопировать строку Name во внешнюю функцию?
C++
1
 const char *pch = new char;
вот это тоже ни к чему здесь, так вы блок в динамической памяти выделяете и присваиваете его адрес указателю pch, а потом вы присваиваете указателю другой адрес, теряя старый, не освободив память, на которую он указывает

я просто быстренько написал что интересует,не думая о памяти )
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
29.04.2014, 23:38     Написать метод, чтобы получить ссылку на строку - поле класса #4
просто вывести на экран массив Name или скопировать его во внешний массив и использовать его копию далее в программе?
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
29.04.2014, 23:43  [ТС]     Написать метод, чтобы получить ссылку на строку - поле класса #5
учу по книжке c++ , стало интересно как по одному элементы вытаскивать,а там пишут только про целиком

цитата из задания : он должен возвращать указатель const , или указатель на копию массива, который был создан с помощью new .
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 180
29.04.2014, 23:57     Написать метод, чтобы получить ссылку на строку - поле класса #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
#include <iostream>
using namespace std;
class Test
{
private:
    char *name;
    int dlina;
public:
    Test(const char*a)
    {
        dlina=strlen(a)+1;
        name=new char[dlina];
        for (int i=0;i<dlina;i++)
            name[i]=a[i];
        
    }
    ~Test(){delete[] name;}
    char* copy_string()
    {
        char *stroka;
        stroka=new char[dlina];
        for (int i=0;i<dlina;i++)
            stroka[i]=name[i];
        return stroka;
    }
 
};
int main()
{
    Test x("jjjj");
    char * s=0;
    s=x.copy_string();
    cout<<s;
    delete[]s;
    return 0;
}
как-то так...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 00:23     Написать метод, чтобы получить ссылку на строку - поле класса
Еще ссылки по теме:

C++ Как получить значение из метода класса, если метод возвращает указатель?
Как передать нестатическое поле в статический метод класса? C++
Написать определение класса leverage, включающего одно закрытое поле типа int с именем crowbar и одним открыты C++

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

Или воспользуйтесь поиском по форуму:
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
30.04.2014, 00:23  [ТС]     Написать метод, чтобы получить ссылку на строку - поле класса #7
спасибо
Yandex
Объявления
30.04.2014, 00:23     Написать метод, чтобы получить ссылку на строку - поле класса
Ответ Создать тему
Опции темы

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