Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
аандрей
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 8
#1

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

29.04.2014, 23:13. Просмотров 900. Ответов 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
Ответы с готовыми решениями:

Как передать в метод класса ссылку на экземпляр
Есть класс class Class{ ... } Как передать в метод экземплер класса из...

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

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

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

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

6
Denis123456789
43 / 43 / 21
Регистрация: 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 / 21
Регистрация: 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 / 21
Регистрация: 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

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

Почему метод класса затирает статическое поле
Добрый день :) Я учу самостоятельна с++. Сейчас разбираю тему классы. Вот у...

Как передать нестатическое поле в статический метод класса?
есть статическая фукция static LRESULT CALLBACK WndProc (...


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

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

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