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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поменять местами наибольший и последний элементы массива http://www.cyberforum.ru/cpp-beginners/thread901390.html
Даны действительные числа х1,...,хn (все числа попарно различны). Поменять местами наибольший и последний элементы. 1 Victoria, сколько ваших тем надо переименовать, чтобы вы обратили наконец внимание на правила форума?! заголовок должен отражать суть задания, название раздела - не есть подходящее название для темы.
C++ Исправление ошибок Помогите запустить программу #include <iostream.h> #include <stdlib.h> #include <fstream.h> int vvod(); int vivod(); char Name; struct ved { int tn; char fam; http://www.cyberforum.ru/cpp-beginners/thread901382.html
Прибавление строк матриц C++
Ввести число К. К элементам к-й строки прибавит элементы первой строки. Вывести начальную и полученную матрицы. Заранее спасибо.
C++ Возможно ли применение сетей Петри для улучшения качества кода и реверс инжинеринга?
Т.к. в ветке "С++ для экспертов" у меня нет прав на создание сообщения и оно не совсем связано с программированием, то задаю вопрос тут. И если да, то где об этом прикладном аспекте почитать?
C++ Решение СЛАУ методом Крамера http://www.cyberforum.ru/cpp-beginners/thread901369.html
Надо было написать прогу, ищущую столбец решений СЛАУ методом Крамера, используя определитель n мерной матрицы , найденный с помощью миноров( рекурсивно). ПРога выдавала ошибки, в конце концов вообще стала вылетать( не компелируется). Что может быть не так?:scratch: #include <time.h> #include <iostream> #include <math.h> #include <stdlib.h> using namespace std; //extern int X;
C++ Рекурсия, вычисление произведения Нужно вычислить произведение n=>2 сомножителей, при чем n парное. у= 1/2*3/2*4/3*4/5*6/5*6/7... Заранее спасибо. подробнее

Показать сообщение отдельно
faradej
0 / 0 / 0
Регистрация: 25.04.2013
Сообщений: 67

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

14.06.2013, 07:02. Просмотров 498. Ответов 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 минут
Если это нельзя реализовать, то тоже пишите, хоть буду знать что что-то неправильно понял.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru