Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 4
1

Наследование классов

11.06.2012, 22:40. Просмотров 528. Ответов 6
Метки нет (Все метки)

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

Рассмотрим класс А

C++
1
2
3
4
5
6
7
8
9
10
11
12
Class A
{ 
protected:
int a; //защищ.целочисл.свойство
public:
A(int x){a=x};// инициал.контруктор
A operator *=(A&); // перегруж. оператор вывода
{
cout<<a;
return 0;
}
}
Вот в таком виде прописал каждый класс, учитывая наследования. Но никак не понимаю как вызвать объекты классов, а также значения их свойств. Заранее спасибо

P.S.: Задание см. с файла.
0
Миниатюры
Наследование классов  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2012, 22:40
Ответы с готовыми решениями:

Автоматическая генерация классов С ++ с UML диаграмм классов. Наследование в с++. Абстрактные классы. WhiteStarUML
Создать классовую модель(желательно в WhiteStarUML), которая включает в себя абстрактный класс...

Заменить наследование классов на наследование интерфейсов
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int...

Наследование классов. Копирование производных классов
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем...

Наследование классов
Здравствуйте. Помогите пожалуйста решить проблему по наследованию классов. Есть базовый класс...

6
Каратель
Эксперт С++
6595 / 4016 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
11.06.2012, 22:43 2
Цитата Сообщение от Joy_92 Посмотреть сообщение
Вот в таком виде прописал каждый класс
показывайте
0
24 / 24 / 3
Регистрация: 17.05.2011
Сообщений: 141
11.06.2012, 22:53 3
для начала
Цитата Сообщение от Joy_92 Посмотреть сообщение
friendA operator *=(A& b); // перегруж. оператор вывода
{
cout<<b.a;
return 0;
}
или
C++
1
2
3
4
void operator =*()
{
cout<<a;
}
а во-вторых, не понятно чего именно ты хочел бы получить в ответ на такой вопрос от обитателей форума...

для того чтоб обратиться к защищенным членам класса по чтению/записи необходим соответствующий метод...
C++
1
int& in_out(){return a;}
0
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 4
11.06.2012, 22:57  [ТС] 4
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
Class A
{
protected:
int a;
public:
void f( ){ }
A(int x){a=x};
A operator *=(A&)
{ 
cout <<a;
return 0;
}
}
 
Class B: public A
{
protected:
int b;
public:
B(int x,int y):A(x){b=y};
B operator *=(B&)
{ 
cout <<b;
return 0;
}
}
 
Class D: private B
{
protected:
int d;
public:
D(int x,int y,int z):B(x,y){d=z};
D operator *=(D&)
{ 
cout <<d;
return 0;
}
}
 
Class C: private A
{
protected:
int c;
public:
C(int x,int i):A(x){c=i};
C operator *=(C&)
{ 
cout <<c;
A::operator*=(Null);
return 0;
}
void f( )
{
A::f ( );
}
}
 
Class E: public C
{
protected:
int e;
public:
E(int x,int i,int j):C(x,i){e=j};
E operator *=(E&)
{ 
cout <<e;
C::operator*=(Null);
return 0;
}
void show ( )
{
operator *=(Null);
f ( );
}
}
Просьба проверить и поправить если что. Спасибо.

Добавлено через 2 минуты
Цитата Сообщение от Глупец Посмотреть сообщение
для начала

а во-вторых, не понятно чего именно ты хочел бы получить в ответ на такой вопрос от обитателей форума...
никак не понимаю как вызвать объекты классов (как их создать), а также вывести значения их свойств.
0
24 / 24 / 3
Регистрация: 17.05.2011
Сообщений: 141
11.06.2012, 23:17 5
для начала
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class A
{
protected:
    int a;
public:
    virtual void f( void ){;}
    A(int x){a=x};
    virtual void out()
    {   cout <<a;   }
};
 
class B: public A
{
protected:
    int b;
public:
    B(int x,int y):A(x){b=y};
    virtual void out()
    {   cout <<b;   }
};
 
class D: private B
{
protected:
    int d;
public:
    D(int x,int y,int z):B(x,y){d=z};
    void out()
    {   cout <<d;   }
};
 
class C: private A
{
protected:
    int c;
public:
    C(int x,int i):A(x){c=i};
    virtual void out()
    {   
        cout <<c;
        A::out();
    }
    /*void f( ) - по сути не нужно в классе A стоит метка virtual перед методом - он доступен как потомку
    {   A::f ();    }*/
};
 
class E: public C
{
protected:
    int e;
public:
    E(int x,int i,int j):C(x,i){e=j};
    void out()
    {   
        cout <<e;
        C::out();
    }
    
    void show ( )
    {
        out();
        f ( );
    }
};
Добавлено через 5 минут
Цитата Сообщение от Joy_92 Посмотреть сообщение
никак не понимаю как вызвать объекты классов (как их создать), а также вывести значения их свойств.
C++
1
2
3
4
5
6
7
8
9
int main()
{
    A *obj = NULL;
    /*coздадим любой объект - что пожелаем*/
    obj = new C(10,15);
    obj.out();
    delete obj;/*вообще чтоб сработало нужены виртуальные деструкторы*/
    return EXIT_SUCCESS;
}
0
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 4
11.06.2012, 23:24  [ТС] 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class A
{
protected:
    int a;
public:
    virtual void f( void ){;}
    A(int x){a=x};
    virtual void out()
    {   cout <<a;   }
};
 
class B: public A
{
protected:
    int b;
public:
    B(int x,int y):A(x){b=y};
    void out()
    {   cout <<b;   }
};
 
class D: private B
{
protected:
    int d;
public:
    D(int x,int y,int z):B(x,y){d=z};
    void out()
    {   cout <<d;   }
};
 
class C: private A
{
protected:
    int c;
public:
    C(int x,int i):A(x){c=i};
    void out()
    {   
        cout <<c;
        A::out();
    }
    /*void f( ) - по сути не нужно в классе A стоит метка virtual перед методом - он доступен как потомку
    {   A::f ();    }*/
};
 
class E: public C
{
protected:
    int e;
public:
    E(int x,int i,int j):C(x,i){e=j};
    void out()
    {   
        cout <<e;
        C::out();
    }
    
    void show ( )
    {
        out();
        f ( );
    }
};
Добавлено через 5 минут

C++
1
2
3
4
5
6
7
8
9
int main()
{
    A *obj = NULL;
    /*coздадим любой объект - что пожелаем*/
    obj = new C(10,15);
    obj.out();
    delete obj;/*вообще чтоб сработало нужены виртуальные деструкторы*/
    return EXIT_SUCCESS;
}
Ага. Это понятно, то есть если по заданию это будет выглядеть так?)

C++
1
2
3
4
5
6
7
8
9
10
11
int main()
{
        D*obj=NULL;
        obj=new D(1,2,3);
        obj.out();
        E*obj=NULL;
        obj=new E(1,2,3);
        obj.out();
        delete obj;
        return EXIT_SUCCESS;
}
И ещё я обратил внимание, что вы не используете перегруженную функцию..=(
0
24 / 24 / 3
Регистрация: 17.05.2011
Сообщений: 141
11.06.2012, 23:37 7
нет, тебя компилятор отругает за переопределение переменной obj

Цитата Сообщение от Joy_92 Посмотреть сообщение
int main()
{
A*obj1 = new D(1,2,3);
obj1.out();
A*obj2 = new E(1,2,3);
obj2.out();
delete obj1;
delete obj2;
return EXIT_SUCCESS;
}
или
C++
1
2
3
4
5
6
7
8
9
10
int main()
{
        A*obj = D(1,2,3);
        obj.out();
        delete obj;
        obj = new E(1,2,3);
        obj.out();
        delete obj;
        return EXIT_SUCCESS;
}
Добавлено через 4 минуты
на счет виртуальных деструкторов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <cstring>
class MY1
{
    char a;
public:
    MY1(){a = 0;puts("constructor MY1");}
    virtual ~MY1(){puts("destructor MY1");}
};
 
class MY2:public MY1
{
public:
    MY2():MY1(){puts("constructor MY2");}
    ~MY2(){puts("destructor MY2");}
};
скомпиль это с меткой virtual и без нее и посмотре что будет

Добавлено через 3 минуты
еще прочитай про перегрузку std::ostream& operator <<(std::ostream&,___ОБЪЕКТ__) не перегружай арифметику для ввода/вывода
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.06.2012, 23:37

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Наследование от классов
Здравствуйте! Вот у меня базовый класс Car. Надо продемонстрировать virtual, override , final и...

Наследование классов
Здравствуйте, извините за глупый вопрос, но у меня проблема в следующем: Имеется базовый класс ...

Наследование классов
Доброго времени Вам. я с толкнулся с неприятной проблемой делая лабораторную работу по ООП, а...

Наследование классов
никак не разберусь с наследованием, у нас тут в методичке дана по нему общая инфа, надо сделать как...


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

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

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