Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
#1

перегрузка оператора = - C++

25.07.2010, 16:35. Просмотров 945. Ответов 16
Метки нет (Все метки)

как реализавать функцию перегрузки оператора = в классах Cd и Classic?
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 <cstring>
#ifndef _ABCD_H_
#define _ABCD_H_
class ABCd
{
    private:
        char performers[50];
        char label[20];
        int selections;
        double playtime;
    public:
        ABCd(char *s1, char *s2, int n, double x);
        virtual void Report() const =0;
        virtual ~ABCd();
};
class Cd : public ABCd                                             
{
    public:
        Cd(char *s1, char *s2, int n, double x) : ABCd(s1,s2,n,x){};
        Cd(const Cd & d);
        Cd();
        virtual ~Cd();
        virtual void Report() const;
        Cd & operator=(const Cd &d);
};
class Classic : public ABCd
{
    private:
        char imp[50];
    public:
        Classic(char *s1, char *s2, int n, double x, char *s3) : ABCd(s1,s2,n,x)
        {strcpy(s3,imp);};
        Classic(const Cd & d, char *s3) : ABCd(d)
        {strcpy(s3,imp);};
        Classic(const Classic & d);
        Classic();
        virtual ~Classic();
        virtual void Report() const;
        Classic & operator=(const Classic &d);
};
#endif
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2010, 16:35
Я подобрал для вас темы с готовыми решениями и ответами на вопрос перегрузка оператора = (C++):

Перегрузка оператора []
Проблема в том, что надо обязательно использовать вид obj, а не obj.arr. Иначе...

Перегрузка оператора +
Здравствуйте! Не могу понять, из-за чего появляется ошибка. Вот программа,...

Перегрузка оператора
Здравствуйте. Не могу разобраться, как перезагрузить оператор &gt;&gt;. int a;...

Перегрузка оператора ==
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс...

Перегрузка оператора ==
Я уже встречала подобный вопрос на этом форуме, но у меня всё равно что-то не...

перегрузка оператора!
Помогите сложить диагонали , при помоши перегрузки оператора+, чтобы можно было...

16
Sekt
157 / 156 / 47
Регистрация: 29.04.2009
Сообщений: 637
25.07.2010, 17:04 #2
А где у вас данные в классе Cd?
0
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
25.07.2010, 19:05  [ТС] #3
Цитата Сообщение от Sekt Посмотреть сообщение
А где у вас данные в классе Cd?
класс Cd унаследовал переменные класса ABCd.

Добавлено через 39 минут
ответте кто ни будь!...
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
25.07.2010, 19:12 #4
nikkka, содержимое класса, которое объявлено с модификатором доступа private не наследуется. Наследуются только protected и public
1
Nick Alte
Эксперт С++
1646 / 1018 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
25.07.2010, 19:42 #5
Цитата Сообщение от M128K145 Посмотреть сообщение
содержимое класса, которое объявлено с модификатором доступа private не наследуется. Наследуются только protected и public
Это не совсем правильно. Данные, объявленные как private, физически наследуются, но потомок не имеет к ним доступа.
1
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
25.07.2010, 19:45 #6
Nick Alte, не знаю как физически, но вот при программировании все же это не важно, потому как данных по сути нету, значит при кодировании их нет и класс их не содержит.
1
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
25.07.2010, 19:46  [ТС] #7
Цитата Сообщение от Nick Alte Посмотреть сообщение
Данные, объявленные как private, физически наследуются, но потомок не имеет к ним доступа.
ну да.
и как это реализовать??? :S
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
25.07.2010, 20:10 #8
nikkka, я же написал решение
Цитата Сообщение от M128K145 Посмотреть сообщение
Наследуются только protected и public
1
nikkka
Мат в 32 хода
236 / 171 / 18
Регистрация: 10.09.2009
Сообщений: 1,096
25.07.2010, 20:15  [ТС] #9
Цитата Сообщение от M128K145 Посмотреть сообщение
nikkka, я же написал решение
Сообщение от M128K145
Наследуются только protected и public
ааа, значит надо записать данные ABCd как protected и потом обрашятся с ними в Cd как со своими?
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
25.07.2010, 20:18 #10
nikkka, тогда они будут унаследованы, да
1
Mur3ik
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
25.07.2010, 20:28 #11
странно... у меня в vs2008 наследуются, и чтобы получить к ним доступ к private френдю дочерний класс и все отлично работает, может это неправильно?
BaseRGS.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
class BaseRGS//базовый клас для комнат, групп и предметов
{
    int id;
    char* name;
        public:
            BaseRGS();
            void set_id(int i);
            int get_id();
            void set_name(char *n);
            char* get_name();
            void show_all();
            friend class Room;
            friend class Group;
            friend class Subject;
};
Room.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
#include "BaseRGS.h"
class Room:public BaseRGS
{
    static int mid;
    Room *next;
    public:
        Room(char *n);
        Room();
        ~Room();
        void set_next(Room *pa);
        Room* get_next();
        static int get_mid();
        static void set_mid(int nid);
};
0
M128K145
Эксперт JavaЭксперт С++
8320 / 3540 / 419
Регистрация: 03.07.2009
Сообщений: 10,708
25.07.2010, 20:30 #12
Mur3ik, так вы определитесь, вам надо наследоваться, или делать его просто дружественным? А может вам надо было просто поле создать с типом BaseRGS?
1
Mur3ik
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
25.07.2010, 20:35 #13
класс Room наследует переменные и методы, а чтобы получить доступ к переменным не через методы делаю Room френдом BaseRGS. только сейчас понял, что с private можно было не заморачиваться т.к. базовый класс только наследую и нигде не использую...

а вообще суть в том есть Комнаты, Группы, Предметы у них у всех есть id и имя, создал базовый класс для них и унаследовал его.
1
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,231
26.07.2010, 00:10 #14
Цитата Сообщение от M128K145 Посмотреть сообщение
не знаю как физически, но вот при программировании все же это не важно, потому как данных по сути нету, значит при кодировании их нет и класс их не содержит.
ну это как посмотреть...
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
#include <iostream>
    
class A {
    int m_nVal;
public:
    A(int val) : m_nVal(val) {}
    virtual ~A() {}
    int getVal() const { return m_nVal; }
    void setVal(int val) { m_nVal = val; }
};
 
class B : public A {
public:
    B(int val) : A(val) {}
    virtual ~B() {}
};
 
int main(){
    B b(13);
    std::cout << b.getVal() << std::endl;
    b.setVal(69);
    std::cout << b.getVal() << std::endl;
    return 0;
}
выведет 13 и 69, проверено
1
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
26.07.2010, 00:18 #15
Цитата Сообщение от M128K145 Посмотреть сообщение
Nick Alte, не знаю как физически, но вот при программировании все же это не важно, потому как данных по сути нету, значит при кодировании их нет и класс их не содержит.
Физически все поля в независимости от открытости/защищенности/закрытости содержатся в производных классах, спецификаторы доступа вляют лишь на их доступность.
1
ForEveR
В астрале
Эксперт С++
7994 / 4753 / 651
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
26.07.2010, 09:30 #16
Mur3ik, friend классы и функции нежелательно использовать без надобности. (Или я не прав на эту тему?)
0
CyBOSSeR
Эксперт С++
2309 / 1682 / 148
Регистрация: 06.03.2009
Сообщений: 3,675
26.07.2010, 09:58 #17
Цитата Сообщение от Lavroff Посмотреть сообщение
Или я не прав на эту тему?
Абсолютно прав.
0
26.07.2010, 09:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2010, 09:58
Привет! Вот еще темы с решениями:

Перегрузка оператора [][]
допустим у меня есть клас Matrix и я хочу опедилить оператор доступа к его...

Перегрузка оператора =
Ввести строку символов S1. Программа должна содержать перегруженную операцию...

перегрузка оператора
Помогите,пожалуйста! у меня есть класс Gruppa, куда входят студенты...

Перегрузка оператора
Привет, форумчане. Есть простой класс, в котором перегружается оператор '==' :...


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

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

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