С наступающим Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Amadara
11 / 11 / 5
Регистрация: 17.12.2014
Сообщений: 269
1

Visual c++ возврат указателя, return *char

18.01.2017, 16:29. Просмотров 860. Ответов 7
Метки нет (Все метки)

есть класс journal, Я передаю в char *name значение "gfg", а возвращает от мне заименнованное значение name[0], только первый символ "f".
как можно получить назад все значение char *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
33
34
35
#include "stdafx.h"
 
int journal::count_object = 0;
 
journal::journal()
{
}
 
journal::journal(char *name_object)
{
    setName(name_object);
    count_object++;
}
 
void journal::setName(char *_name)
{
    std::cout << "*_name    " << *_name << std::endl;
    std::cout << "_name " << _name << std::endl;
    name = _name;
}
 
char journal::getName()
{
    char *_name = name;
    return *_name;
}
 
void journal::show()
{
    std::cout << name << std::endl;
}
 
journal::~journal()
{
}
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
#pragma once
class journal
{
private:
    static int count_object;
    static int const n = 1;
    char *name;
protected:
    
public:
    journal();
    journal(char *);
 
    static int count()
    {
        return count_object;
    }
 
    void setName(char *);
    char getName();
    
    void show();
 
    ~journal();
};


C++
1
2
3
4
5
6
7
8
int main()
{
    journal obj1_journal("gfg");
 
 
**
    std::cout << "" << journal::count() << std::endl;
    std::cout << "" << obj1_book.getName() << std::endl;
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2017, 16:29
Ответы с готовыми решениями:

Возврат char* через return
Вот написал маленький пример, того с чем не могу разобраться в большой...

Возврат указателя
Написать функцию возвращающую ссылку на элемент глобального массива. ...

Возврат указателя на массив из функции
День добрый, коллеги по цеху. Не откажите в нужде java программисту в познаниях...

Возврат функцией указателя на функцию
Всем привет! У меня возникла такая проблема: класс имеет поле-указатель на...

Возврат указателя на массив из функции
Здравствуйте. Пытаюсь вернуть указатель на массив из функции. #include...

7
Raali
647 / 350 / 75
Регистрация: 06.07.2013
Сообщений: 1,123
Завершенные тесты: 1
18.01.2017, 16:34 2
Лучший ответ Сообщение было отмечено Amadara как решение

Решение

дак ты и возвращай из getName указатель на все имя
а с char - ты возвращаешь копию первого символа имени
C++
1
2
3
4
const char* journal::getName()
{
   return name;
}
1
Amadara
11 / 11 / 5
Регистрация: 17.12.2014
Сообщений: 269
18.01.2017, 16:36  [ТС] 3
Цитата Сообщение от Raali Посмотреть сообщение
дак ты и возвращай из getName указатель на все имя
а с char - ты возвращаешь копию первого символа имени
C++
1
2
3
4
const char* journal::getName()
{
   return name;
}
ахаха, так просто

а как это работает?
почему нужно ставить const?
0
Raali
647 / 350 / 75
Регистрация: 06.07.2013
Сообщений: 1,123
Завершенные тесты: 1
18.01.2017, 16:45 4
Цитата Сообщение от Amadara Посмотреть сообщение
а как это работает?
почему нужно ставить const?
у тебя имя - это массив char - например "gfg", для того чтобы его возвратить мы пользуемся его адресом char* name, а не копией первого символа 'g' , у которого совершенно другой адрес, который не имеет ничего общего со строкой "gfg"/

const не обязательно ставить, но лучше ставить всегда там, где не требуется изменения переменной, чтобы пользователь не мог менять name, который специально сделан приватным!
например уже нельзя будет сделать так -
C++
1
test_journal.getName()[0] = 'A';
тем самым поломав приватность класса, и изменив имя "gfg" на "Afg"
1
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
18.01.2017, 17:37 5
Цитата Сообщение от Amadara Посмотреть сообщение
а как это работает?
С сишных времён, при выводе указателя на char, выводится символы за ним идущие до спец. символа '\0'.
Цитата Сообщение от Amadara Посмотреть сообщение
почему нужно ставить const?
Потому что мы возвращаем указатель, который потенциально может изменить объект. А get метод нужен только для получения значений, он не должен иметь привилегий на изменение.
1
GbaLog-
Любитель чаепитий
3167 / 1473 / 465
Регистрация: 24.08.2014
Сообщений: 5,210
Записей в блоге: 1
Завершенные тесты: 2
18.01.2017, 17:50 6

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
 
struct Test
{
    char* name_;
    
    const char* name()
    {
        return name_;
    }
};
    
 
int main()
{
    Test t{"Vasya"};
    std::cout << t.name() << "\n";
    delete t.name();
    std::cout << t.name(); //UB
}
Хотя, от этого даже std::string не защитит. У него есть метод data().
1
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
18.01.2017, 18:01 7
Цитата Сообщение от GbaLog- Посмотреть сообщение
delete t.name();
Visual c++ возврат указателя, return *char
1
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4957 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
18.01.2017, 18:02 8
Какие-то у вас сложные манипуляции. Можно проще:
C++
1
2
3
4
int main()
{
    delete "Vasya";
}
1
18.01.2017, 18:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2017, 18:02

Возврат указателя на локальный объект
Доброго дня! Заинтересовал процесс возврата указателя на локальный объек, а...

Возврат указателя на строку из фукнции
Снова я пришел к вам со строками. Читаю &quot;Как программировать на С++&quot; и там...

Возврат указателя на массив указателей
Доброго времени суток. Есть программа, где куча методов должны работать с одни...


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

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

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