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

Множественное наследование(правильно ли...образец) - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.63
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
17.09.2011, 20:34     Множественное наследование(правильно ли...образец) #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
32
33
34
35
36
37
38
39
40
41
#include <iostream>
 
using namespace std;
 
class A{ // Родительский класс...
    public:
        A(int _x = 0) { x = _x: }
    protected;
        int x:
};
 
class В:virtual public A{ // Унаследованый класс...
    public:
        void AddB(int y) { x += y: }
};
 
 
class С:virtual public A{ // Унаследованый класс...
    public:
        void AddC(int y) { x += y; }
};
 
class D:public B,public C{
    public:
        void ShowX() { cout<<"x = "<<x<<"\n"; }
};
 
int main()
{
    D d;
 
    d.ShowX();
    d.AddB(10);
 
    d.ShowX();
    d.AddB(5);
 
    d.ShowX();
 
    return 0;
}
на вид всё просто и должно работать...но компилятор несёт такие вещи

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
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: stray ‘\320’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: stray ‘\222’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: stray ‘\320’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: stray ‘\241’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|8|error: expected ‘:’ before ‘;’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|10|error: expected primary-expression before ‘}’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|10|error: expected ‘;’ before ‘}’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|10|error: expected ‘;’ before ‘}’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In constructor ‘A::A(int):|
/home/ollegator/Desktop/Множественное наследование/main.cpp|7|error: ‘x’ was not declared in this scope|
/home/ollegator/Desktop/Множественное наследование/main.cpp|7|error: expected ‘;’ before ‘:’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In member function ‘void<anonymous class>::AddB(int):|
/home/ollegator/Desktop/Множественное наследование/main.cpp|14|error: ‘x’ was not declared in this scope|
/home/ollegator/Desktop/Множественное наследование/main.cpp|14|error: expected ‘;’ before ‘:’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: an anonymous struct cannot have function members|
/home/ollegator/Desktop/Множественное наследование/main.cpp|15|error: abstract declarator ‘<anonymous class>’ used as declaration|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In member function ‘void<anonymous class>::AddC(int):|
/home/ollegator/Desktop/Множественное наследование/main.cpp|20|error: ‘x’ was not declared in this scope|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: an anonymous struct cannot have function members|
/home/ollegator/Desktop/Множественное наследование/main.cpp|21|error: abstract declarator ‘<anonymous class>’ used as declaration|
/home/ollegator/Desktop/Множественное наследование/main.cpp|23|error: expected class-name before ‘,’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|23|error: expected class-name before ‘{’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In member function ‘void D::ShowX():|
/home/ollegator/Desktop/Множественное наследование/main.cpp|25|error: ‘x’ was not declared in this scope|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In function ‘int main():|
/home/ollegator/Desktop/Множественное наследование/main.cpp|33|error:class D’ has no member named ‘AddB’|
/home/ollegator/Desktop/Множественное наследование/main.cpp|36|error:class D’ has no member named ‘AddB’|
||=== Build finished: 22 errors, 0 warnings (0 minutes, 0 seconds) ===|
Компилировалось в Code::Blocks 10.5 (Linux, g++);

Знающие подскажите студенту...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.09.2011, 20:34     Множественное наследование(правильно ли...образец)
Посмотрите здесь:

C++ Множественное наследование
Множественное наследование C++
Множественное наследование C++
Множественное наследование C++
Множественное наследование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.09.2011, 20:37     Множественное наследование(правильно ли...образец) #2
Цитата Сообщение от OLLEGATOR Посмотреть сообщение
protected;
int x:
попробуйте поменять местами ; и :
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
17.09.2011, 20:41  [ТС]     Множественное наследование(правильно ли...образец) #3
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
41
#include <iostream>
 
using namespace std;
 
class A{ // Родительский класс...
    public:
        A(int _x = 0) { x = _x; }
    protected:
        int x;
};
 
class В:virtual public A{ // Унаследованый класс...
    public:
        void AddB(int y) { x += y; }
};
 
 
class С:virtual public A{ // Унаследованый класс...
    public:
        void AddC(int y) { x += y; }
};
 
class D:public B,public C{
    public:
        void ShowX() { cout<<"x = "<<x<<"\n"; }
};
 
int main()
{
    D d;
 
    d.ShowX();
    d.AddB(10);
 
    d.ShowX();
    d.AddB(5);
 
    d.ShowX();
 
    return 0;
}

исправил....

Ошибки:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: stray ‘\320’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: stray ‘\222’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: stray ‘\320’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: stray ‘\241’ in program|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In constructor ‘A::A(int):|
/home/ollegator/Desktop/Множественное наследование/main.cpp|7|error: expected ‘;’ before ‘:’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In member function ‘void<anonymous class>::AddB(int):|
/home/ollegator/Desktop/Множественное наследование/main.cpp|14|error: expected ‘;’ before ‘:’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: an anonymous struct cannot have function members|
/home/ollegator/Desktop/Множественное наследование/main.cpp|12|error: member ‘A <anonymous class>::<anonymous>’ with constructor not allowed in anonymous aggregate|
/home/ollegator/Desktop/Множественное наследование/main.cpp|15|error: abstract declarator ‘<anonymous class>’ used as declaration|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: an anonymous struct cannot have function members|
/home/ollegator/Desktop/Множественное наследование/main.cpp|18|error: member ‘A <anonymous class>::<anonymous>’ with constructor not allowed in anonymous aggregate|
/home/ollegator/Desktop/Множественное наследование/main.cpp|21|error: abstract declarator ‘<anonymous class>’ used as declaration|
/home/ollegator/Desktop/Множественное наследование/main.cpp|23|error: expected class-name before ‘,’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp|23|error: expected class-name before ‘{’ token|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In member function ‘void D::ShowX():|
/home/ollegator/Desktop/Множественное наследование/main.cpp|25|error: ‘x’ was not declared in this scope|
/home/ollegator/Desktop/Множественное наследование/main.cpp||In function ‘int main():|
/home/ollegator/Desktop/Множественное наследование/main.cpp|33|error:class D’ has no member named ‘AddB’|
/home/ollegator/Desktop/Множественное наследование/main.cpp|36|error:class D’ has no member named ‘AddB’|
||=== Build finished: 17 errors, 0 warnings (0 minutes, 0 seconds) ===|
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
17.09.2011, 20:45     Множественное наследование(правильно ли...образец) #4
OLLEGATOR, в 7-й и 14-йстроках точки с запятой поставь вместо двоеточия
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
17.09.2011, 20:49  [ТС]     Множественное наследование(правильно ли...образец) #5
уже поставил... та же картина..
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
17.09.2011, 21:00     Множественное наследование(правильно ли...образец) #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
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
class A
{
    public:
        A() : x(0)
        { };
        A(int _x) : x(_x)
        { };
    protected:
        int x;
};
 
class BB : virtual public A
{ 
    public:
        void AddB(int y) { x += y; }
};
 
 
class CC : virtual public A
{
    public:
        void AddC(int y) { x += y; }
};
 
class D : public BB, public CC/*, public A*/
{
    public:
        void ShowX() { std::cout << "x = " << x << "\n"; }
};
 
int main()
{
    D d;
 
    d.ShowX();
    d.AddB(10);
 
    d.ShowX();
    d.AddB(5);
 
    d.ShowX();
 
    return 0;
}
Фуф. Этот компилируется в dev-cpp. на работоспособность не проверял.
Что сделал:
1) Стер class B;
2) Перекомпилировал
3) Получил ошибки
4) Написал class BB
5) повторил с class C
6) ???
7) profit!

Почему так - не понял. Если кто знает, поделитесь.
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
17.09.2011, 22:03  [ТС]     Множественное наследование(правильно ли...образец) #7
тоже ничего не могу понять...

Добавлено через 12 минут
такой код работает :
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
41
42
#include <iostream>
 
using namespace std;
 
class A{
    public:
        A(){ x=0; }
        A(int y) { x=y; }
    protected:
        int x;
};
 
class B:virtual public A{
    public:
        void AddB(int y) { x += y; }
};
 
 
class C:virtual public A{
    public:
        void AddC(int y) { x += y; }
};
 
class D:public B,public C{
    public:
        void ShowX() { cout << "x = " << x << "\n"; }
};
 
int main()
{
    D d;
 
    d.ShowX();
    d.AddB(10);
 
    d.ShowX();
    d.AddB(5);
 
    d.ShowX();
 
    return 0;
}
но подскажите почему не работает книжный паст...кто знает..
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
18.09.2011, 00:35     Множественное наследование(правильно ли...образец) #8
Цитата Сообщение от OLLEGATOR Посмотреть сообщение
но подскажите почему не работает книжный паст...кто знает..
Там классы В и С обозначены русскими буквами.
soon
18.09.2011, 08:46
  #9

Не по теме:

Вот это, блин, косяк. А я голову ломал над stray* ошибками

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2011, 15:59     Множественное наследование(правильно ли...образец)
Еще ссылки по теме:

Множественное наследование C++
Множественное наследование C++
Множественное наследование C++

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

Или воспользуйтесь поиском по форуму:
OLLEGATOR
Linux-оид
 Аватар для OLLEGATOR
115 / 64 / 3
Регистрация: 15.02.2011
Сообщений: 353
18.09.2011, 15:59  [ТС]     Множественное наследование(правильно ли...образец) #10
кстати без конструктора
C++
1
A(){ x=0; }
не хочет работать на linux... не знаю как на визуалке..может кто то попробует
Yandex
Объявления
18.09.2011, 15:59     Множественное наследование(правильно ли...образец)
Ответ Создать тему
Опции темы

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