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

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

Войти
Регистрация
Восстановить пароль
 
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
#1

Работа с конструктором - C++

12.03.2013, 19:40. Просмотров 426. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток.

Получил задание по программированию в универе. Писать задание за меня не прошу, нужно лишь уяснить парочку моментов. В общем-с, необходимо создать класс Person с одним единственным полем типа сhаr *, в котором можно хранить имя и которое можно проинициализировать только через конструктор Person(char const *). Препод сказал, что внутри конструктора должен использоваться аллокатор new, для выделения памяти. Вот тут то я и застрял. Первая проблема в том, что поле имеет тип char*, а аргумент конструктора - char const*. Вторая проблема - это выделение нужного объема памяти. Если бы нужно было выделять ее через malloc(), то тут не было бы проблем, а вот c new я плохо знаком. Прошу помочь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
using namespace std;
 
class Person
{
private:
    char *name;
 
public:
    Person(char const *n)
    {    
         // ???
    }
 
};
 
int main()
{
    Person p1 = "cyberforum";
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 19:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Работа с конструктором (C++):

Работа с конструктором - C++
Доброго времени суток. Обращаюсь к вам с двумя проблемами. Во-первых, Code Blocks выдаёт у меня ошибку multiple definition. Связано ли...

Прекращена работа программы, неполадки с конструктором - C++
При запуске выбывает &quot;Прекращена работа программы&quot;. Скорее всего проблемы с конструктором для Note mas; . Может намудрил с указателем на...

Проблема с конструктором. - C++
Пытаюсь сделать класс список и не получается написать конструктор копирования. header // #include &lt;iostream&gt;; using namespace std; ...

Что-то с конструктором - C++
Задача: написать программу бюджета, есть два типа счета, у каждого свои параметры пополнения и снятия. Место вывода баланса только что...

Трабла с конструктором - C++
Компилятор никаких ошибок не выдает, но программа не запускается. using namespace std; class Cpmv { public: struct Info ...

Ввод данных с конструктором - C++
Всем привет, новичок в с++ и возникла проблема. Вот рабочий код: #include &lt;iostream&gt; using namespace std; class Student { ...

9
Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
12.03.2013, 19:43 #2
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
#include <iostream>
using namespace std;
 
class Person
{
private:
    char *name;
 
public:
    Person(char const *s)
    {    
         name = new char[strlen(s) + 1];
         strcpy(name,s);
    }
    ~Person()
    {
        delete [] name;
    }
 
};
 
int main()
{
    Person p1("cyberforum");
 
    return 0;
}
1
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
12.03.2013, 21:34  [ТС] #3
Why so seriouS,
Спасибо, все понял)

Странно, почему я не могу нажать "Спасибо" под твоим постом? Этой ссылки просто нет
0
Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
12.03.2013, 22:28 #4
Цитата Сообщение от murtukov Посмотреть сообщение
Странно, почему я не могу нажать "Спасибо" под твоим постом?
Я только сегодня зарегистрировался, еще не могу иметь репутацию
1
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
13.03.2013, 01:52  [ТС] #5
Why so seriouS, ну, как появится возможность, обязательно отправлю)

Кстати, возник еще вопрос. Вот допустим я хочу добавить в класс Person метод, с помощью которого можно считывать сохраненное имя name извне, но при этом, чтобы его нельзя было изменить. Как можно это реализовать?
0
Humble_Beck
15 / 15 / 1
Регистрация: 10.03.2013
Сообщений: 54
13.03.2013, 01:58 #6
Можно так:
C++
1
2
3
char* getName(){
        return name;
    }
и имя Вы никак не поменяете так как оно private
0
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
13.03.2013, 02:17  [ТС] #7
Цитата Сообщение от Humble_Beck Посмотреть сообщение
Можно так:
Код C++
1
2
3
char* getName(){
return name;
}
и имя Вы никак не поменяете так как оно private
Почему же не поменяю? Поменяю)
Вот:

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
37
38
39
40
#include <iostream>
#include <cstring>
using namespace std;
 
class Person
{
private:
    char *name;
 
public:
    Person(char const *s)
    {
         name = new char[strlen(s) + 1];
         strcpy(name,s);
    }
    ~Person()
    {
        delete [] name;
    }
 
    char * getArr()
    {
        return name;
    }
};
 
int main()
{
    Person p1("cyberforum");
 
    char * ptr = p1.getArr();
 
    cout << ptr << endl;
 
    ptr[0] = 'k';
 
    cout << p1.getArr(); // первая буква изменилась
 
    return 0;
}
0
Why so seriouS
44 / 44 / 1
Регистрация: 12.03.2013
Сообщений: 167
13.03.2013, 18:40 #8
Цитата Сообщение от murtukov Посмотреть сообщение
но при этом, чтобы его нельзя было изменить.
Можно создать копию name и возвращать указатель не на name а на копию:
C++
1
2
3
4
5
6
char * getArr()
    {
        char* ptr = new char[strlen(name) + 1];
        strcpy(ptr,name);
        return ptr;
    }
1
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
13.03.2013, 19:55  [ТС] #9
Why so seriouS,

Но ведь тогда будет утечка памяти, если я буду несколько раз вызывать метод getArr()
1
Nameless One
Эксперт С++
5774 / 3424 / 255
Регистрация: 08.02.2010
Сообщений: 7,447
13.03.2013, 20:00 #10
C++
1
const char *getArr() const;
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 20:00
Привет! Вот еще темы с ответами:

Затык с конструктором thread - C++
Здравствуйте. Есть проблема - имеется код функции void CalculatingChecker () { { unique_lock&lt;mutex&gt;...

Необходимо разобраться с конструктором! - C++
class Complex { public: // Конструктор по умолчанию // (в данном случае является также и конструктором преобразования) ...

Присваивание конструктором копирования - C++
Всем форумчанам привет. Я совсем недавно изучаю с++. Помогите плиз понять. К примеру вот такой код: #include &lt;iostream.h&gt; int...

Проблемы с конструктором (вроде) - C++
Недавно перешёл с С на С++. Есть класс Notebook который использует определённый мной список имён. list.h: //List.h template...


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

Или воспользуйтесь поиском по форуму:
10
Yandex
Объявления
13.03.2013, 20:00
Ответ Создать тему
Опции темы

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