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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
#1

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

25.07.2010, 16:35. Просмотров 900. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.07.2010, 16:35     перегрузка оператора =
Посмотрите здесь:

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

перегрузка оператора - C++
Как перегрузить оператор , чтобы его можно было использовать для операций присваивания новых значений определённого члена массива? покажите...

Перегрузка оператора ~ - C++
Доброго времени суток! Помогите пожалуйста с решением задачи. Описать класс множество целых чисел. Перегрузить следующую операцию: ~...

Перегрузка оператора + - C++
не получается в своем классе перегрузить оператор + :( пишет &quot;error C2804: бинарный &quot;operator +&quot; имеет слишком много параметров&quot;,...

Перегрузка оператора [] - C++
Возможно ли создать два перегруженных оператора индексации, чтобы один из них возвращал l-value, другой r-value? В этом примере в обоих...

Перегрузка оператора - C++
Здравствуйте. Нужна помощь) Есть такой класс: class vect { public: float *items; vect() { items = new float; for(int...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Sekt
156 / 155 / 10
Регистрация: 29.04.2009
Сообщений: 637
25.07.2010, 17:04     перегрузка оператора = #2
А где у вас данные в классе Cd?
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
25.07.2010, 19:05  [ТС]     перегрузка оператора = #3
Цитата Сообщение от Sekt Посмотреть сообщение
А где у вас данные в классе Cd?
класс Cd унаследовал переменные класса ABCd.

Добавлено через 39 минут
ответте кто ни будь!...
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.07.2010, 19:12     перегрузка оператора = #4
nikkka, содержимое класса, которое объявлено с модификатором доступа private не наследуется. Наследуются только protected и public
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
25.07.2010, 19:42     перегрузка оператора = #5
Цитата Сообщение от M128K145 Посмотреть сообщение
содержимое класса, которое объявлено с модификатором доступа private не наследуется. Наследуются только protected и public
Это не совсем правильно. Данные, объявленные как private, физически наследуются, но потомок не имеет к ним доступа.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.07.2010, 19:45     перегрузка оператора = #6
Nick Alte, не знаю как физически, но вот при программировании все же это не важно, потому как данных по сути нету, значит при кодировании их нет и класс их не содержит.
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
25.07.2010, 19:46  [ТС]     перегрузка оператора = #7
Цитата Сообщение от Nick Alte Посмотреть сообщение
Данные, объявленные как private, физически наследуются, но потомок не имеет к ним доступа.
ну да.
и как это реализовать??? :S
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.07.2010, 20:10     перегрузка оператора = #8
nikkka, я же написал решение
Цитата Сообщение от M128K145 Посмотреть сообщение
Наследуются только protected и public
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
25.07.2010, 20:15  [ТС]     перегрузка оператора = #9
Цитата Сообщение от M128K145 Посмотреть сообщение
nikkka, я же написал решение
Сообщение от M128K145
Наследуются только protected и public
ааа, значит надо записать данные ABCd как protected и потом обрашятся с ними в Cd как со своими?
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.07.2010, 20:18     перегрузка оператора = #10
nikkka, тогда они будут унаследованы, да
Mur3ik
102 / 102 / 4
Регистрация: 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);
};
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.07.2010, 20:30     перегрузка оператора = #12
Mur3ik, так вы определитесь, вам надо наследоваться, или делать его просто дружественным? А может вам надо было просто поле создать с типом BaseRGS?
Mur3ik
102 / 102 / 4
Регистрация: 12.05.2010
Сообщений: 232
25.07.2010, 20:35     перегрузка оператора = #13
класс Room наследует переменные и методы, а чтобы получить доступ к переменным не через методы делаю Room френдом BaseRGS. только сейчас понял, что с private можно было не заморачиваться т.к. базовый класс только наследую и нигде не использую...

а вообще суть в том есть Комнаты, Группы, Предметы у них у всех есть id и имя, создал базовый класс для них и унаследовал его.
easybudda
Эксперт С++
9456 / 5469 / 927
Регистрация: 25.07.2009
Сообщений: 10,495
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, проверено
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.07.2010, 00:18     перегрузка оператора = #15
Цитата Сообщение от M128K145 Посмотреть сообщение
Nick Alte, не знаю как физически, но вот при программировании все же это не важно, потому как данных по сути нету, значит при кодировании их нет и класс их не содержит.
Физически все поля в независимости от открытости/защищенности/закрытости содержатся в производных классах, спецификаторы доступа вляют лишь на их доступность.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
26.07.2010, 09:30     перегрузка оператора = #16
Mur3ik, friend классы и функции нежелательно использовать без надобности. (Или я не прав на эту тему?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2010, 09:58     перегрузка оператора =
Еще ссылки по теме:

Перегрузка оператора - C++
Доброго времени суток. Столкнулся с проблемой перегрузки оператора &quot;++&quot; выдает ошибку в первой строке: postfix ‘const Counter...

Перегрузка оператора * - C++
Операция произведения применяется к объекту квадрат, при этом изменяются координаты центры фигуры. Результатом произведения является...

Перегрузка оператора - C++
Доброго всем времени. пытаюсь написать свой класс надстройка на одномерный массив. У меня вот возникло затруднение с перегрузками...

Перегрузка оператора [] - C++
Есть код перегрузки оператора для получения данных из массива. #include &lt;iostream&gt; class obj { private: int *arr; ...


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

Или воспользуйтесь поиском по форуму:
CyBOSSeR
Эксперт C++
2299 / 1669 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.07.2010, 09:58     перегрузка оператора = #17
Цитата Сообщение от Lavroff Посмотреть сообщение
Или я не прав на эту тему?
Абсолютно прав.
Yandex
Объявления
26.07.2010, 09:58     перегрузка оператора =
Ответ Создать тему
Опции темы

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