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

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

Войти
Регистрация
Восстановить пароль
 
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
#1

Производный класс, аргументы по умолчанию - C++

14.06.2013, 07:02. Просмотров 503. Ответов 7
Метки нет (Все метки)

Здравствуйте. Есть базовый класс и производный. Проблема в том что в производном классе надо сделать один аргумент, который наследуется от базового класса, по умолчанию, но по условии задания я могу редактировать только определения класса, а я этот самый аргумент даже передать не могу в производный так как он не объявлен в конструкторе производного класса.

Чтобы вам было удобней я выделил жирным и курсивным шрифтом проблемные участки.

Заголовочный файл:
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
#include <iostream>
using namespace std;
 
class Port
{
private:
    char * brand;
    char style[20];
    int bottles;
public:
    [B]Port(const char * br = "none", [I]const char * st = "none"[/I], int b = 0);[/B]
    Port(const Port & p);
    virtual ~Port(){delete [] brand;}
    Port & operator= (const Port & p);
    Port & operator+= (int b);
    Port & operator-= (int b);
    int BottleCount() const {return bottles;}
    virtual void Show() const;
    friend ostream & operator<< (ostream & os, const Port & p);
};
 
class VintagePort : public Port
{
private:
    char * nickname;
    int year;
public:
    VintagePort();
    [B]VintagePort(const char * br, int b, const char * nn, int y);[/B]
    VintagePort(const VintagePort & vp);
    ~VintagePort(){delete [] nickname;}
    VintagePort & operator=(const VintagePort & vp);
    void Show() const;
    friend ostream & operator<<(ostream & os, const VintagePort & vp);
};
Определения классов:
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 "dma.h"
#include <cstring>
Port::Port(const char * br, const char * st, int b)
{
    brand = new char[std::strlen(br) + 1];
    strcpy(brand, br);
    
    strcpy(style, st);
    bottles = b;
}
 
void Port::Show() const
{
    cout << "Brand: " << brand << endl <<
            "Kind: " << style << endl <<
            "Bottles: " << bottles << endl;
};
 
std::ostream & operator<<(std::ostream & os, const Port & hs)
{
    os << hs.brand << ", " << hs.style << ", " << hs.bottles << std::endl;
    return os;
}
 
Port & Port::operator+=(int b)  //добавляем бутылки в подвал
{
    bottles += b;
    return *this;
}
 
Port & Port::operator-=(int b)  //забераем бутылки из подвала
{
    if(bottles <= b)
    bottles = 0;
    else
    bottles -= b;
    return *this;
}
 
Port & Port::operator=(const Port & p)  //добавляем бутылки в подвал
{
    brand = new char[std::strlen(p.brand) + 1];
    strcpy(brand, p.brand);
    strcpy(style, p.style);
    bottles = p.bottles;
    return *this;
}
 
[B]VintagePort::VintagePort(const char * br, int b, const char * nn, int y) : Port(br, [I]st[/I], b)
{
    
}[/B]
Само использование, правда только базового класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include "dma.h"
#include <cstdlib>
 
int main()
{
   Port object1("Gallo", "tawny", 20);
   object1.Show();
   cout << object1;
   object1 += 5;
   cout << object1;
   object1 -=15;
   cout << object1;
 
   Port object2;
   object2 = object1;
   cout << endl <<  object2;
   system("PAUSE");
   return 0; 
}
Добавлено через 3 минуты
Думал что выделил , но там видно теги. Кстати, зачем нужны конструкторы копирования? Они выполняют какую-то автоматическую роль, или они работаю как по типу перегруженных "<<", "="? Тоже никак не могу вкурить...

Добавлено через 47 минут
Если это нельзя реализовать, то тоже пишите, хоть буду знать что что-то неправильно понял.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2013, 07:02     Производный класс, аргументы по умолчанию
Посмотрите здесь:
Создайте производный класс с дополнительными полями, конструктором по умолчанию и методами чтения/изменения значений этих полей C++
Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это? C++
Аргументы по умолчанию C++ C++
C++ Аргументы функции по умолчанию
Аргументы функции по умолчанию C++
C++ Аргументы функции по умолчанию
C++ Аргументы функции по умолчанию
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
14.06.2013, 08:50     Производный класс, аргументы по умолчанию #2
пока у меня только такие мыслишки:
создаем два экземпляра VintagePort
один своим конструктором
C++
1
2
VintagePort *vp1;
vp1 = new VintagePort("brand", 1, "nickname", 1970);
второй конструктором Port, чтобы задать style:
C++
1
2
VintagePort *vp2;
vp2 = (VintagePort) new Port("my_vp_style");
потом копируем второй в первый,
C++
1
vp1=vp2;
и все будет при нём...
осталось только хитро описать конструктор копирования для VintagePort
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
14.06.2013, 09:06     Производный класс, аргументы по умолчанию #3
Как вариант, в списке инициализации вызвать конструктор базового класса без параметров, а потом инициализировать только необходимые значения, остальные останутся теми, что были по умолчанию для базового
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
14.06.2013, 10:13     Производный класс, аргументы по умолчанию #4
Цитата Сообщение от Croessmah Посмотреть сообщение
вызвать конструктор базового класса без параметров, а потом инициализировать только необходимые значения, остальные останутся теми, что были по умолчанию для базового
так не получится инициализировать style базового класса, т.к. он не protected
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
14.06.2013, 10:28     Производный класс, аргументы по умолчанию #5
Цитата Сообщение от AntonChik Посмотреть сообщение
так не получится инициализировать style базового класса, т.к. он не protected
Значение ему будет присвоено в конструкторе базового класса
AntonChik
1083 / 581 / 21
Регистрация: 11.11.2008
Сообщений: 1,544
14.06.2013, 12:47     Производный класс, аргументы по умолчанию #6
Цитата Сообщение от Croessmah Посмотреть сообщение
в списке инициализации вызвать конструктор базового класса без параметров
тогда почему без параметров?
как раз в этот момент и надо инициализировать style
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
14.06.2013, 13:05     Производный класс, аргументы по умолчанию #7
Цитата Сообщение от AntonChik Посмотреть сообщение
тогда почему без параметров?
как раз в этот момент и надо инициализировать style
Я так понял, что нужно его инициализировать значением по умолчанию. Хотя черт его знает что нужно ТС
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.06.2013, 17:06     Производный класс, аргументы по умолчанию
Еще ссылки по теме:
Создать класс линия и производный класс отрезок C++
Базовый класс Complex и производный класс Vector C++
C++ Базовый класс Liquid и производный класс Alcohol
C++ Написать класс строка и производный класс, ее шифрующий
C++ Базовый класс Student и производный класс Aspirant

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

Или воспользуйтесь поиском по форуму:
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67
14.06.2013, 17:06  [ТС]     Производный класс, аргументы по умолчанию #8
Но значение по умолчанию должно быть новое для производного класса, а не "none", как у базового.
Yandex
Объявления
14.06.2013, 17:06     Производный класс, аргументы по умолчанию
Ответ Создать тему
Опции темы

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