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

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

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

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

25.07.2010, 16:35. Просмотров 907. Ответов 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++
У меня имеется структура и метод, который вызывается след образом: A.plus_and_minus(B); Есть огромное желание перегрузить функцию += ,...

Перегрузка оператора = - C++
Есть некий класс. И два класса-наследника. Надо перегрузить оператор =, к тому же в дочерних классах вызывать перегрузку в базовом классе....

Перегрузка оператора = - C++
помогите создать перегруженный оператор = в классе Х, который будет копировать содержание строки S1 в S2.

Перегрузка оператора = - C++
Как перегрузить оператор = для char ?

Перегрузка оператора - C++
Подскажите пожалуйста, способ перегрузки операторов &gt;= и &lt;= в следующей строке if ( ob.str &gt;= '0' &amp;&amp; ob.str &lt;= '9' )Мой вариант не...

Перегрузка оператора != - C++
Помогите разобраться с перегрузкой оператора != есть класс, в котором, в разделе private объявлен указатель на массив std::string *str; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Эксперт С++
8286 / 3505 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
25.07.2010, 19:12 #4
nikkka, содержимое класса, которое объявлено с модификатором доступа private не наследуется. Наследуются только protected и public
Nick Alte
Эксперт С++
1636 / 1008 / 119
Регистрация: 27.09.2009
Сообщений: 1,945
Завершенные тесты: 1
25.07.2010, 19:42 #5
Цитата Сообщение от M128K145 Посмотреть сообщение
содержимое класса, которое объявлено с модификатором доступа private не наследуется. Наследуются только protected и public
Это не совсем правильно. Данные, объявленные как private, физически наследуются, но потомок не имеет к ним доступа.
M128K145
Эксперт С++
8286 / 3505 / 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
Эксперт С++
8286 / 3505 / 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
Эксперт С++
8286 / 3505 / 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
Эксперт С++
8286 / 3505 / 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
Модератор
Эксперт CЭксперт С++
9530 / 5523 / 932
Регистрация: 25.07.2009
Сообщений: 10,606
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++
2300 / 1670 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
26.07.2010, 00:18 #15
Цитата Сообщение от M128K145 Посмотреть сообщение
Nick Alte, не знаю как физически, но вот при программировании все же это не важно, потому как данных по сути нету, значит при кодировании их нет и класс их не содержит.
Физически все поля в независимости от открытости/защищенности/закрытости содержатся в производных классах, спецификаторы доступа вляют лишь на их доступность.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.07.2010, 00:18
Привет! Вот еще темы с ответами:

перегрузка оператора () - C++
Вопрос заключается в следующем: - Что собой представляет перегружаемый оператор()? - Как его перегрузить? ( обычные операторы тип ++ и...

Перегрузка оператора == - C++
Пытаюсь перегрузить оператор == . Делаю так: В классе: class cData // класс дата { int year; // год short mounth; //...

Перегрузка оператора += - C++
Создал класс дробь. Пытаюсь перегрузить оператор += (или -=, *=, /=) А компилятор выдаёт ошибку 'drob operator+=(drob&amp;)' must take...

Перегрузка оператора [] - C++
Сделал простой аналог auto_ptr для дин. массива. Файл #ifndef ARRAY_PTR_GUARD #define ARRAY_PTR_GUARD template&lt; class Ty_ &gt; ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.07.2010, 00:18
Ответ Создать тему
Опции темы

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