1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
1

Наследование класса Устройство

05.09.2019, 14:36. Показов 608. Ответов 9
Метки нет (Все метки)

У меня есть класс Устройство,мне нужно создать второй класc который наследует базовый,с этими же методами,
но с дополнительными полями.
Я не понимаю как мне это переносить,как делать подскажите.

Device.h
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
#include <iostream>
#include <cstring>
 #include <fstream>
#include<istream>
#include<iostream>
#include<string>
class Device
{
    std::string interface;
    int power;
    int weight;
public:
 
    void output_interface() { std::cout<<interface<<std::endl; }
    void output_power()     { std::cout<<power<<std::endl;     }
    void output_weight()    { std::cout<<weight<<std::endl;    }
 
    void input_interface();
    void input_power();
    void input_weight();
 
   void  operator()(const char *, int, int);
    Device & operator=(Device &dev);
    friend std::istream & operator>>(std::istream &is, Device &dev);
    friend std::ostream & operator<<(std::ostream &os, Device &dev);
 
    Device(std::string str = "0", int x = 0, int y = 0): interface(str), power(x), weight(y) {}
    ~Device() {}
};
Device.cpp
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
#include "Device.h"
#include <fstream>
#include<istream>
#include<iostream>
#include<string>
void Device::input_interface()
{
    std::cout<<"Enter the device interface: ";
    getline(std::cin, interface);
}
 
void Device::input_power()
{
    std::cout<<"Enter the device power: ";
    std::cin>>power;
}
 
void Device::input_weight()
{
    std::cout<<"Enter the device weigth: ";
    std::cin>>weight;
}
 
void Device::operator()(const char *str, int x, int y)
{
    interface = str;
    power     = x;
    weight    = y;
    std::cout<<"This constructor";
}
 
Device & Device::operator=(Device &dev)
{
    if (this != &dev) {
        interface = dev.interface;
        power     = dev.power;
        weight    = dev.weight;
    }
    return dev;
}
 
std::istream & operator>>(std::istream &is, Device &dev)
{
    return is>>dev.interface>>dev.power>>dev.weight;
}
 
std::ostream & operator<<(std::ostream &os, Device &dev)
{
    return os<<"Interface: "<<dev.interface<<std::endl
                 <<"Power: "    <<dev.power<<std::endl
                 <<"Weight: "   <<dev.weight<<std::endl;
}

Это производной клас printDevice,то что я начал делать
printDevice.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
#include <cstring>
 #include <fstream>
#include<istream>
#include<iostream>
#include<string>
#include "Device.h"
class printDevice{
    int diagonal;
    char quality;
 
public:
    printDevice(void);
 
};
printDevice.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "printDevice.h"
#include <fstream>
#include<istream>
#include<iostream>
#include<string>
 
printDevice::printDevice(void)
{
}
void printDevice::operator()(int dia, char* qual)
{
    diagonal    = dia;
    quality   = qual;
    std::cout<<"This constructor";
}
printDevice & printDevice::operator=(printDevice &pr)
{
    if (this != &pr) {
        diagonal = pr.diagonal;
        quality     = pr.quality;
    }
    return pr;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.09.2019, 14:36
Ответы с готовыми решениями:

Наследование: Как мне определить любой из методов заданного класса внутри другого класса?
Добрый день, подскажите пожалуйста, что я делаю не так Есть файл Container.h в котором храню...

Наследование абстрактного класса
Не могли бы вы мне объяснить данный код: Actions *NewAct = new Array(); // строка 1 ((Array...

Наследование класса Exception
Доброе время суток, уважаемые профи, и знатоки! У меня появилась очень серьезная проблема, суть...

Наследование класса String
Начал осваивать ООП С++ и решил в виде практики добавить в класс #include &lt;string&gt; добавить свою...

9
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
05.09.2019, 16:14 2
Цитата Сообщение от gordon8899 Посмотреть сообщение
У меня есть класс Устройство,мне нужно создать второй класc который наследует базовый,с этими же методами,
но с дополнительными полями.
Я не понимаю как мне это переносить,как делать подскажите
Наверное вот так

C++
1
2
3
4
5
6
7
8
9
10
class printDevice
: public Device
{
    int diagonal;
    char quality;
 
public:
    printDevice(void);
 
};
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 3
05.09.2019, 17:13 3
во первых, добавь "#pragma once" в начало Device.h, во вторых, зачем тебе наследовать этот класс, если все равно придется перегружать всё кроме input/output функций? получится каша, а не класс. В третьих, зачем заинклюдено столько ненужного?

из инклюдов в Device.h достаточно
C++
1
2
3
4
#pragma once
 
#include <iostream>
#include <string>
в Device.cpp
C++
1
#include "Device.h"
в printDevice.h
C++
1
#include "Device.h"
в printDevice.cpp
C++
1
#include "printDevice.h"
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
05.09.2019, 17:40  [ТС] 4
Потому-что,у меня такое задание,скажите как мне перезагрузить это все
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 3
06.09.2019, 11:40 5
тогда в Device.h внеси interface, power, weight в protected и переопределяй все операторы Device уже для printDevice

printDevice.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "Device.h"
 
#include <string>
 
class printDevice : public Device
{
 
protected:
    
    int diagonal;
    std::string quality;
 
public:
    
    printDevice(std::string str = "0", int x = 0, int y = 0, int dia = 0, char qua = '0') : Device(str, x, y)
    {
        this -> diagonal = dia;
        this -> quality  = qua;
    };
    
    void operator () (const char*, int, int, int, char);
    friend std::ostream & operator << (std::ostream&, printDevice&);
};
printDevice.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include "printDevice.h"
 
void printDevice::operator () (const char *str, int x, int y, int dia, char qual)
{
    this -> interface = str;
    this -> power     = x;
    this -> weight    = y;
    this -> diagonal  = dia;
    this -> quality   = qual;
}
 
std::ostream& operator << (std::ostream &os, printDevice &dev)
{
    return os<< "Interface: "<< dev.interface <<std::endl
             << "Power: "    << dev.power     <<std::endl
             << "Weight: "   << dev.weight    <<std::endl
             << "Diagonal: " << dev.diagonal  <<std::endl
             << "Quality: "  << dev.quality   <<std::endl;
}
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
06.09.2019, 14:36  [ТС] 6
А почему в protected?
0
0 / 0 / 0
Регистрация: 30.05.2018
Сообщений: 3
06.09.2019, 15:24 7
чтобы они были доступны для производного класса
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
06.09.2019, 15:27  [ТС] 8
У меня кстати ошибка появляется

error C2668: 'printDevice : : printDevice' : ambiguous call to overloaded function
Но когда убераю конструктор-работает
C++
1
2
3
4
5
  printDevice(string str = "0", int x = 0, int y = 0, int dia = 0, string qua = "0") : Device(str, x, y)
    {
        this -> diagonal = dia;
        this -> quality  = qua;
    }
В чем дело?
0
6737 / 4537 / 1838
Регистрация: 07.05.2019
Сообщений: 13,725
Записей в блоге: 1
06.09.2019, 15:29 9
Цитата Сообщение от gordon8899 Посмотреть сообщение
В чем дело?
Конфликтует с printDevice(void);, убери его
0
1 / 1 / 1
Регистрация: 09.02.2018
Сообщений: 127
06.09.2019, 15:33  [ТС] 10
Да,спасибо работает,
А не подскажите как это сделать?

в пределах иерархии классов построить полиморфическое кластер на основе виртуального метода для считывания данных в переменных power или quality.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.09.2019, 15:33

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Наследование класса Вектор
Помогите написать прогу плииззз.... Разработать класс NormVector – вектор единичной длины,...

Наследование методов класса
Я пишу программу на наследование классов.Базовый - Person , с объектами имя , возраст , вес....

Наследование класса List
Подскажите пожалуйста, подключаю заголовок #include &lt;list&gt;, но наследовать класс List не могу, к...

Объекты класса. Наследование
Помогите написать программу которая подсчитывает объекты класса используя наследование.


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

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

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