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

Наследование классов, обратиться к замещающей функции - C++

Восстановить пароль Регистрация
 
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 11:56     Наследование классов, обратиться к замещающей функции #1
заголовочный файл
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
#include <iostream>
using namespace std;
class X{
public:
    int x1,x2;
 
    X(int x_1, int x_2){
        x1 = x_1;
        x2 = x_2;
    };
    ~X(void){};
    
    virtual void set(int x_1,int x_2){
        x1 = x_1;
        x2 = x_2;
    };
    virtual void print(void){
        cout << "x1 = " << x1 << endl;
        cout << "x2 = " << x2 << endl;
    };
    
};
class Y: public X{
public:
    int y;
    Y(int x1, int x2,int y_1) : X(x1,x2){
        y = y_1;
     }
    ~Y(void){};
    void print(void){
        cout << "x1 = " << x1 << endl;
        cout << "x2 = " << x2 << endl;
        cout << "y = " << y << endl;
    };
    void set(int x_1,int x_2, int y_1){
        x1 = x_1;
        x2 = x_2;
        y = y_1; 
    };
    int run(void){
        return (x1 -x2)/y;
    };
};
*.cpp файл
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "stdafx.h"
#include "work_5.h"
#include <stdio.h>
#include <conio.h>
#include <iostream>
 
using namespace System;
 
int main()
{
   Y test_y(4,2,2);
   X *test_x;
   test_x = &test_y;
   test_x->print();
   test_x->set(6,0,2);
    _getch();
    return 0;
}
Компилятор говорит, что
1>work_5.cpp(16): error C2660: X::set: функция не принимает 3 аргументов
Весь инет вчера облазила не нашла, там надо как указать что мы работаем с Y а не X, не пойму механизм обращения с дочерними классами
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2014, 11:56     Наследование классов, обратиться к замещающей функции
Посмотрите здесь:

Наследование от 2-х классов C++
C++ Наследование классов
Наследование классов C++
Наследование классов C++
наследование классов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
04.06.2014, 11:58     Наследование классов, обратиться к замещающей функции #2
В 15-й строке убери ноль и одну запятую.
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 12:13  [ТС]     Наследование классов, обратиться к замещающей функции #3
но мне нужно, что значения и x1 и x2 и y переприсвоились
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
04.06.2014, 13:02     Наследование классов, обратиться к замещающей функции #4
Тогда в 13-й строке заголовочного файла добавь запятую и int, чтобы метод set переопределялся.
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 13:06  [ТС]     Наследование классов, обратиться к замещающей функции #5
а почему так разве он не должен что типа, вот раз три параметра, обращаться надо в Y:: print, почему он в Y идет через X какой смысл тогда в наследовании ? он что во все функции Y идет через X? почему на конструктор не жалуется?
dzrkot
zzzZZZ...
 Аватар для dzrkot
516 / 346 / 53
Регистрация: 11.09.2013
Сообщений: 1,977
04.06.2014, 15:18     Наследование классов, обратиться к замещающей функции #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Дъячелли Посмотреть сообщение
а почему так разве он не должен что типа, вот раз три параметра, обращаться надо в Y:: print, почему он в Y идет через X какой смысл тогда в наследовании ? он что во все функции Y идет через X? почему на конструктор не жалуется?
добавьте в базовый класс пустую функцию (для неё есть вроде отдельное название, но не помню...мб я путаю, дома посм)
virtual void set(int x_1,int x_2, int s){};
связано это (по идее, если не прав пусть ГУРУ поправят) с динамическим связыванием функции во время компиляции, то, что функция virtual означает, что содержатся ещё аналогичные функции (т.е. функции с(int ,int) , а не (int int int) - из-за возможности перегрузки функций в С++ их имена кодируются, и видимо в этом и трабл), соответственно компилятор ищет в Y функцию именно с 2мя аргументами

Добавлено через 11 минут
или можно создать чистую виртуальную функцию, тогда класс X будет абстрактным, тогда тоже всё работает
virtual void set(int x_1,int x_2, int s) = 0;//чистая виртуальная функция
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2014, 15:20     Наследование классов, обратиться к замещающей функции
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 15:20  [ТС]     Наследование классов, обратиться к замещающей функции #7
да суть проблемы ясна, так работает все, получается что иначе никак и не сделаешь, из-за этой перегрузки
спасибо, за подсказку про виртуальную функцию, абстрактный класс как вариант
Yandex
Объявления
04.06.2014, 15:20     Наследование классов, обратиться к замещающей функции
Ответ Создать тему
Опции темы

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