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

Наследование, спецификаторы доступа - C++

Восстановить пароль Регистрация
 
mrguseynov
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 16
08.07.2015, 11:32     Наследование, спецификаторы доступа #1
Всем привет. Подскажите, что я не правильно делаю
Код:
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
#include <iostream>
#include <string>
using namespace std;
class Informat
{
    public:
        string set_name(string sax){name=sax;}
        string set_position(string tan){position=tan;}
        int set_age(int asa){age=asa;}
    protected:
        string name;
        string position;
        int age;
};
class Medic:public Informat
{
    string get_name(){return name;}
    string get_position(){return position;}
    int get_age(){return age;}
};
int main()
{
    Medic Obj;
    Obj.set_name("Yura");
    Obj.set_position("Therapist");
    Obj.set_age(55);
    cout<<"Imya: "<<Obj.get_name()<<endl;
    cout<<"Doljnost: "<<Obj.get_position()<<endl;
    cout<<"Vozrast: "<<Obj.get_age()<<endl;
    return 0;
}
Ошибка:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
user@pc:~/Desktop$ g++ untitled.cpp 
untitled.cpp: In function ‘int main():
untitled.cpp:17:9: error: ‘std::string Medic::get_name()’ is private
  string get_name(){return name;}
         ^
untitled.cpp:27:31: error: within this context
  cout<<"Imya: "<<Obj.get_name()<<endl;
                               ^
untitled.cpp:18:9: error: ‘std::string Medic::get_position()’ is private
  string get_position(){return position;}
         ^
untitled.cpp:28:39: error: within this context
  cout<<"Doljnost: "<<Obj.get_position()<<endl;
                                       ^
untitled.cpp:19:6: error:int Medic::get_age()’ is private
  int get_age(){return age;}
      ^
untitled.cpp:29:33: error: within this context
  cout<<"Vozrast: "<<Obj.get_age()<<endl;
                                 ^
user@pc:~/Desktop$
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
08.07.2015, 11:45     Наследование, спецификаторы доступа #2
написано же, методы приватные, спецификатор доступа в классе, по умолчанию private допишите в классе Medic public
т.е
C++
1
2
3
4
class Medic:public Informat
{
public:
//и т.д
mrguseynov
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 16
09.07.2015, 23:50  [ТС]     Наследование, спецификаторы доступа #3
Цитата Сообщение от aLarman Посмотреть сообщение
написано же, методы приватные, спецификатор доступа в классе, по умолчанию private допишите в классе Medic public
т.е
C++
1
2
3
4
class Medic:public Informat
{
public:
//и т.д
Думаете не пробовал. Вот что выдает:
C++
1
2
3
4
5
user@pc:~$ cd /home/user/Desktop/
user@pc:~/Desktop$ g++ untitled.cpp 
user@pc:~/Desktop$ ./a.out
Segmentation fault (core dumped)
user@pc:~/Desktop$
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
10.07.2015, 00:20     Наследование, спецификаторы доступа #4
mrguseynov, падает из-за отсутствия return в методах базового класса
самое интересное - только 32битный код, 64бита отрабатывает нормально
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
max@box:~/src$ g++ -m32 -Wall -Wextra -pedantic -std=c++14 nnm.cxx -o nnm
nnm.cxx: In member function ‘std::string Informat::set_name(std::string)’:
nnm.cxx:7:46: warning: no return statement in function returning non-void [-Wreturn-type]
         string set_name(string sax){name=sax;}
                                              ^
nnm.cxx: In member function ‘std::string Informat::set_position(std::string)’:
nnm.cxx:8:54: warning: no return statement in function returning non-void [-Wreturn-type]
         string set_position(string tan){position=tan;}
                                                      ^
nnm.cxx: In member function ‘int Informat::set_age(int)’:
nnm.cxx:9:38: warning: no return statement in function returning non-void [-Wreturn-type]
         int set_age(int asa){age=asa;}
                                      ^
max@box:~/src$ ./nnm
*** Error in `./nnm': munmap_chunk(): invalid pointer: 0xf777ca34 ***
Аварийный останов
max@box:~/src$ file nnm
nnm: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=3ff4166f01cffdf70f438ca86e64066a75d5c23a, not stripped
aLarman
636 / 557 / 89
Регистрация: 13.12.2012
Сообщений: 2,109
10.07.2015, 09:57     Наследование, спецификаторы доступа #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Cra3y Посмотреть сообщение
самое интересное - только 32битный код, 64бита отрабатывает нормально
в любом случае это UB, и то что 64х не упал, не значит что код рабочий)

Добавлено через 1 минуту
таки Cra3y, дело говорит, set-теры, или методы set_xxx сделайте void)
mrguseynov
0 / 0 / 1
Регистрация: 06.11.2014
Сообщений: 16
10.07.2015, 11:03  [ТС]     Наследование, спецификаторы доступа #6
aLarman, Спасибо,помогло

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
#include <iostream>
#include <string>
using namespace std;
class Informat
{
    public:
        void set_name(string sax){name=sax;}
        void set_position(string tan){position=tan;}
        void set_age(int asa){age=asa;}
    protected:
        string name;
        string position;
        int age;
};
class Medic:public Informat
{
    public:
        string get_name(){return name;}
    string get_position(){return position;}
    int get_age(){return age;}
};
int main()
{
    Medic Obj;
    Obj.set_name("Yura");
    Obj.set_position("Therapist");
    Obj.set_age(55);
    cout<<"Imya: "<<Obj.get_name()<<endl;
    cout<<"Doljnost: "<<Obj.get_position()<<endl;
    cout<<"Vozrast: "<<Obj.get_age()<<endl;
    return 0;
}
Yandex
Объявления
10.07.2015, 11:03     Наследование, спецификаторы доступа
Ответ Создать тему
Опции темы

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