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

Наследование классов - C++

Восстановить пароль Регистрация
 
Joy_92
0 / 0 / 0
Регистрация: 08.04.2011
Сообщений: 4
11.06.2012, 22:40     Наследование классов #1
Доброго времени суток. Обращаюсь за помощью к Вам. Язык С++ стал изучать недавно и столкнулся вот с такой проблемой:

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

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.: Задание см. с файла.
Миниатюры
Наследование классов  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2012, 22:40     Наследование классов
Посмотрите здесь:

Наследование классов. Копирование производных классов C++
C++ наследование классов
C++ Наследование классов
C++ Наследование Классов
наследование классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.06.2012, 22:43     Наследование классов #2
Цитата Сообщение от Joy_92 Посмотреть сообщение
Вот в таком виде прописал каждый класс
показывайте
Глупец
23 / 23 / 1
Регистрация: 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;}
Joy_92
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 минуты
Цитата Сообщение от Глупец Посмотреть сообщение
для начала

а во-вторых, не понятно чего именно ты хочел бы получить в ответ на такой вопрос от обитателей форума...
никак не понимаю как вызвать объекты классов (как их создать), а также вывести значения их свойств.
Глупец
23 / 23 / 1
Регистрация: 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;
}
Joy_92
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;
}
И ещё я обратил внимание, что вы не используете перегруженную функцию..=(
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2012, 23:37     Наследование классов
Еще ссылки по теме:

C++ Наследование классов.
C++ Наследование классов
C++ Наследование классов

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

Или воспользуйтесь поиском по форуму:
Глупец
23 / 23 / 1
Регистрация: 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&,___ОБЪЕКТ__) не перегружай арифметику для ввода/вывода
Yandex
Объявления
11.06.2012, 23:37     Наследование классов
Ответ Создать тему
Опции темы

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