Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
#1

Дружественные функции и наследования

01.11.2017, 20:06. Просмотров 787. Ответов 16
Метки нет (Все метки)

Ситуация: у меня есть классы figure (координаты фигуры (c,d)) и checker (координаты шашки (x,y)).
Определена функция step в классе checker. Эта же функция дружественная классу figure. Я реализую эту функцию так, что, по сути, координаты c и d объекта класса figure присваиваются объекту класса checker. И, на экран вывожу для ОБЪЕКТА КЛАССА checker координаты c, d, которые принадлежат объекту класса figure (я думаю. вы все поняли, что я имел ввиду - реализировал дружественную функцию).
Вопрос: если я унаследую checker от figure (то есть, figure будет базовым, а checker потомком), то как сделать то же, что делает дружественная функция, только, конечно же, уже без нее???
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2017, 20:06
Ответы с готовыми решениями:

Дружественные функции. Наследование. Перегрузка функции
Здравствуйте, у меня проблема Не знаю куда Вставить имеющийся код(В какую...

Дружественные функции
Задание такое: Дано 2 класса: stud, содержащий сведения о студенте (фамилия,...

дружественные функции
Тема: дружественные функции Напишите программу обращения слова. Помогите...

Дружественные функции
Напишите программу, вычеркивающую из данного слова все буквы «а» (так, чтобы,...

Дружественные функции
Добрый день. Подскажите как правильно запихнуть данные код в тело дружественной...

16
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 20:10 #2
Цитата Сообщение от Max_Raptor Посмотреть сообщение
я думаю. вы все поняли, что я имел ввиду

какое наивное заявление
0
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 20:15  [ТС] #3
Kuzia domovenok, так понятней?

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
class figure;
 
class checker
{
private:
        int number;
        int x;
        int y;
 
    public:
     
        void step(figure&);
 
        checker(int Number, int X, int Y)
        {
            number = Number;
            x = X;
            y = Y;
        }
     
};
 
class figure
{
            private:
                int c;
                int d;
                string color;
                friend void checker::step(figure&);
 
            public:
                figure(int C, int D, string color)
                {
                    c = C;
                    d = D;
                    this->color = color;
                }
};
 
void checker::step(figure &a)
{
    cout<<"Ordinal number of checker: "<<number<<endl;
    cout<<"Color - "<<a.color<<endl;
    cout<<"New coordinate x after step: " <<a.c<<endl;
    cout<<"New coordinate y after step: " <<a.d <<endl<<endl;
}
 
int main()
{
   
    figure A = figure(7,1,"black");
    figure B = figure(6,1,"white");
    checker K = checker(1, 1, 1);
    K.step(A);
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 20:27 #4
Ну если вы унаследуете checker от фигуры, то, конечно весь этот бред c, d, step сможете смело удалять. Координатами X и Y фигуры класс checker будет полноправно владеть!

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
class figure
{
            private:
                int x;
                int y;
};
 
class checker: public figure
{
public:
 
};
1
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 20:29  [ТС] #5
Kuzia domovenok, это я знаю...
Но, мне нужен пример, что ли. Вот как я себе это представляю: я создаю объект А класса figure с параметрами, затем создаю объект В класса checker со своими параметрами (такое возможно?). Потом я еще что-то пишу, и вывожу объект В на экран, и у него не те параметры, которые я задал при объявлении, а параметры объекта А (то есть, то же что в моем коде с др. функцией, только при наследовании.) Такое возможно реализовать?
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 20:45 #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
class figure
{
private:
    int x;
    int y;
public:
    void set(int x, int y){
        this->x = x;
        this->y = y;
    }
    void get(int &x, int &y){
        x = this->x;
        y = this->y;
    }
    figure(int x_, int y_):x(x_), y(y_){}
};
 
class checker : public figure
{
public:
    checker(int x, int y):figure(x, y){}
    void assign(const figure& f){}
};
int main(){
    checker C(1, 2);
    figure D(-1, -2);
    figure& other = C;
    other=D;// C.x;C.y =-1 -2
    system("pause");
    return 0;
}
1
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 20:54  [ТС] #7
Kuzia domovenok, спасибо, а как на экран вывести это? И что нам именно здесь дают set и get функции?
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 20:55 #8
И что нам именно здесь дают set и get функции?
именно здесь - ничего
0
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 21:04  [ТС] #9
Kuzia domovenok, понял, вижу, что не используются, да и void assign(const figure& f){} не используется. А зачем их объявлять? И можно ли вывести на экран С, с новыми координатами?
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 21:07 #10
Max_Raptor, потому что я думал что они нужны, а они не пригодились, зачем-зачем...
0
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 21:08  [ТС] #11
Kuzia domovenok, бро, не обижайся, я очень любопытный. Но все эти методы фигня, как объект вывести на экран? Вот, что меня сейчас волнует в жизни больше всего))
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 21:11 #12
C++
1
2
3
4
5
void checker::print()
{
    cout<<"New coordinate x after step: " <<x<<endl;
    cout<<"New coordinate y after step: " <<y<<endl<<endl;
}
0
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 21:17  [ТС] #13
Kuzia domovenok, что-то ты слишком сложный код пишешь. Компилятор ругается на x и y (типа, они здесь не должны быть)
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 21:22 #14
C++
1
2
3
4
5
6
7
8
9
10
11
int figure::getX(){
return x;
}
int figure::getY(){
return y;
}
void checker::print()
{
    cout<<"New coordinate x after step: " <<getX()<<endl;
    cout<<"New coordinate y after step: " <<getY()<<endl<<endl;
}
0
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 21:55  [ТС] #15
Kuzia domovenok, я ничего не понимаю, с этими функциями, ты бред какой-то пишешь, честное слово. Во-первых ошибки о том, что x,y в private, и т.д.
0
Kuzia domovenok
2261 / 2030 / 459
Регистрация: 25.03.2012
Сообщений: 7,173
Записей в блоге: 1
01.11.2017, 22:02 #16
Лучший ответ Сообщение было отмечено Max_Raptor как решение

Решение

может надо хоть чуть-чуть разбираться в языке, на котором пишешь, а не тупо копипастить с форумов, а потом падать в обморок от каждой ошибочной точки с запятой!
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
#include <iostream>
#include <cstring>
class figure
{
private:
    int x;
    int y;
public:
    int getY();
    int getX();
    figure(int x_, int y_) :x(x_), y(y_){}
};
int figure::getX(){
    return x;
}
int figure::getY(){
    return y;
}
 
class checker : public figure
{
public:
    checker(int x, int y) :figure(x, y){}
    void assign(const figure& f){}
    void print();
};
void checker::print()
{
    cout << "New coordinate x after step: " << getX() << endl;
    cout << "New coordinate y after step: " << getY() << endl << endl;
}
int main(){
    checker C(1, 2);
    figure D(-1, -2);
    figure& other = C;
    other = D;
    C.print();
    system("pause");
    return 0;
}
1
Max_Raptor
1 / 1 / 0
Регистрация: 30.05.2017
Сообщений: 54
01.11.2017, 22:20  [ТС] #17
Kuzia domovenok, жаль, что у меня даже "чуть-чуть" не получится. И что, мне вешаться, что ли?
За код спасибо!
0
01.11.2017, 22:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2017, 22:20

Дружественные функции
День добрый. class Distance { private: int fut; int inch; public:...

дружественные функции
Всем привет!!! Есть код: #include&lt;iostream.h&gt; #include&lt;conio.h&gt;...

Дружественные функции
Доброго времени суток! Помогите пожалуйста разобраться с задачей: Создать...


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

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

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