Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
#1

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

04.06.2014, 11:56. Просмотров 251. Ответов 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
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, не пойму механизм обращения с дочерними классами
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2014, 11:56
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Наследование классов, обратиться к замещающей функции (C++):

Реализовать иерархию классов (использовать наследование, полиморфизм, виртуальные функции) - C++
Первый базовый класс – млекопитающие; поля – способ питания, вес, среда обитания. Во втором базовом классе описываются географические...

Заменить наследование классов на наследование интерфейсов - C++
#include &lt;iostream&gt; #include &lt;assert.h&gt; using namespace std; int people_on_base = 100; int vehicles_on_base = 100; double...

Наследование классов. Копирование производных классов - C++
Здравствуйте всем, у меня такой вопрос: написал код #include &quot;stdafx.h&quot; class A //Создаем класс А { int mA; ...

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

Наследование от 2-х классов - C++
Возможна ли следующая структура: class A class B : class A class C : class A class D : class B : class C

Наследование классов - C++
Помогите пожалуйста написать программу Создайте базу данных деканата. В ней фиксируются данные о 2 категории студентах: студенты...

6
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
04.06.2014, 11:58 #2
В 15-й строке убери ноль и одну запятую.
0
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 12:13  [ТС] #3
но мне нужно, что значения и x1 и x2 и y переприсвоились
0
castaway
Эксперт С++
4926 / 3033 / 372
Регистрация: 10.11.2010
Сообщений: 11,084
Записей в блоге: 10
Завершенные тесты: 1
04.06.2014, 13:02 #4
Тогда в 13-й строке заголовочного файла добавь запятую и int, чтобы метод set переопределялся.
0
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 13:06  [ТС] #5
а почему так разве он не должен что типа, вот раз три параметра, обращаться надо в Y:: print, почему он в Y идет через X какой смысл тогда в наследовании ? он что во все функции Y идет через X? почему на конструктор не жалуется?
0
dzrkot
zzzZZZ...
523 / 354 / 54
Регистрация: 11.09.2013
Сообщений: 2,039
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;//чистая виртуальная функция
1
Дъячелли
0 / 0 / 0
Регистрация: 03.02.2012
Сообщений: 58
04.06.2014, 15:20  [ТС] #7
да суть проблемы ясна, так работает все, получается что иначе никак и не сделаешь, из-за этой перегрузки
спасибо, за подсказку про виртуальную функцию, абстрактный класс как вариант
0
04.06.2014, 15:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2014, 15:20
Привет! Вот еще темы с ответами:

Наследование классов! - C++
Помогите с задачей!немного закрутила Описать класс студент,который содержит инфу о студенте с помощью наследования,основать класс...

Наследование классов - C++
Здравствуйте. Помогите пожалуйста решить проблему по наследованию классов. Есть базовый класс class parent { ...

наследование классов в C++ - C++
решил я с SDL поиграться.... ругается на 9 строчку компилятор, где ошибку допустил не подскажете?) main.cpp #include &lt;iostream&gt; ...

наследование классов - C++
Помогите пожалуйста разобраться с задачей Создайте базу данных деканата. В ней фиксируются данные о 2 категориях студентах: студенты...


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

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

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