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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
#1

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

29.04.2014, 23:13. Просмотров 385. Ответов 6
Метки нет (Все метки)

Есть класс,назову его 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) , вот как переписать чтоб не требовался аргумент?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.04.2014, 23:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Написать метод, чтобы получить ссылку на строку - поле класса (C++):

Как передать в метод класса ссылку на экземпляр - C++
Есть класс class Class{ ... } Как передать в метод экземплер класса из которого вызывается этот метод? Пробывал так: class Class{ ...

Не получается вызвать метод класса потомка через ссылку - C++
class Book { protected: char type; char title; char ISBN; char edition; char circulation; char...

Как сделать указатель/ссылку на метод конкретного экземпляра класса - C++
Добрый день. Подскажите можно ли в c++ каким либо образом объявить указатель/ссылку на функцию конкретного экземпляра класса и вызвать ее...

В конструкторе вложенного класса инициализируется приватное поле. Потом вызывается функция-метод этого класса и выводит значение этого поля НО НЕ ТО! - C++
Друзья! Почему так? #include <windows.h> #include <iostream> using namespace std; //Вот главный класс class A{ ...

Указатель на метод и на поле класса - C++
Суть такова, нужно создать класс студент, определить метод доступа к скрытым полям уровень знаний и курс. Создать открытое поле стипедия....

Можно ли получить ссылку на экземпляр класса по полю этого экземпляра - C++
схематично код такой - class A { static void staticMethodA(SomeClass* memberA); SomeClass* memberA; } void...

6
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
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, а потом вы присваиваете указателю другой адрес, теряя старый, не освободив память, на которую он указывает
1
аандрей
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, а потом вы присваиваете указателю другой адрес, теряя старый, не освободив память, на которую он указывает

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

цитата из задания : он должен возвращать указатель const , или указатель на копию массива, который был создан с помощью new .
0
Denis123456789
43 / 43 / 17
Регистрация: 02.06.2013
Сообщений: 181
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;
}
как-то так...
0
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
30.04.2014, 00:23  [ТС] #7
спасибо
0
30.04.2014, 00:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2014, 00:23
Привет! Вот еще темы с ответами:

Почему метод класса затирает статическое поле - C++
Добрый день :) Я учу самостоятельна с++. Сейчас разбираю тему классы. Вот у меня возник вопрос по коду: #include&lt;iostream&gt; using...

Как передать нестатическое поле в статический метод класса? - C++
есть статическая фукция static LRESULT CALLBACK WndProc ( HWND,UINT,WPARAM,LPARAM); в ней нужно использоавть поля класса, вопрос -...

Создать метод для класса, который бы вводил через консоль строку - C++
Здравствуйте! В задании мне нужно создать метод для класса, который бы вводил через консоль строку, а второй метод-выводил её, но только...

Как получить значение из метода класса, если метод возвращает указатель? - C++
Всем привет. Как получить значение из метода класса, если метод возвращает указатель? Вот тут я пилю типо класса аккаунтов, у меня не...


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

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

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