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

Передача аргументов в конструктор - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Почему не работает цикл получения параметров объекта? http://www.cyberforum.ru/cpp-beginners/thread1702500.html
Есть такой код int j = 0; while(!feof(f)) { (**ob).get_p(f, name_1, name_2, name_3, &x, &y); ++j; } где ob-объект класса. Почему при удалении из кода счетчика j...
C++ Научите создавать эхо сервер Это возможно звучит очень нагло. Но передо мной поставили такую задачу, создать эхо сервер и эхо клиент, и чтобы я разбиралась в этом) Можно посидеть в скайпе, поболтать) В ответ помогу чем смогу) http://www.cyberforum.ru/cpp-beginners/thread1702490.html
C++ Срабатывание точки останова
Выделяю память char **a = new char*; // 3 строк for (int i = 0; i < 3; i++) { a = new char; // Под каждую строку выделяем массив в 20 символов } освобождаю память
C++ Задачка на нахождения числа прямоугольников площадь которых больше D
Каждой парой (Xk, Yk) заданы длины сторон одного из прямоугольников; найти число тех прямоугольников, площадь которых больше D. Не могу понять как это записать насчет прямоугольников. Не могу понять...
C++ Найти наибольшую сумму костей домино игрока http://www.cyberforum.ru/cpp-beginners/thread1702449.html
У игрока есть k костей домино - прямоугольников 2x1. Он кладет их на доску так, чтобы не возникало наложений, и его выигрыш вычисляется как сумма произведений чисел, накрытых каждой из костей домино....
C++ Распределить код на функции В общем,такая проблема,нужно создать перегруженную функцию,для кода,но когда я начинаю делать это,то появляется масса ошибок,я не знаю почему. Код написан и отлично работает,единственное,что... подробнее

Показать сообщение отдельно
bambique
1 / 1 / 2
Регистрация: 02.04.2015
Сообщений: 169
05.04.2016, 16:11  [ТС]
Цитата Сообщение от hoggy Посмотреть сообщение
Port(const char * br = "none",const char * st = "none",int b = 0, int y = 0);
Мне не нужен аргумент y в конструкторе базового класса, но все же почему это должно заработать? Чем этот четвертый параметр мне поможет? Даже если оно и заработает, то почему?

Добавлено через 7 минут
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
В том, что вы привели, никаких проблем не видно.
Как это не видно? Я описал вам проблему, вот весь код.
.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
30
31
32
33
34
35
36
#pragma once
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
class Port
{
private:
    char * brand;
    char style[20];
    int bottles;
public:
    Port(const char * br = "none",const char * st = "none",int b = 0);
    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 std::ostream & operator<<(std::ostream &os, const Port & p);
};
 
 
class VintagePort :public Port
{
private:
    char * nickname;
    int year;
public:
    //VintagePort();
    VintagePort(const char *br, int b, const char *nn, int y);
    //VintagePort(const VintagePort &vp);
    ~VintagePort() { delete[] nickname; };
    //VintagePort & operator=(const VintagePort &vp);
    //void Show() const;
    //friend ostream & operator<<(ostream &os, const VintagePort &vp);
};
.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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include "Port.h"
 
using namespace std;
 
 
 
Port::Port(const char * br, const char * st, int b)
{
    brand = new char[strlen(br) + 1];
    strcpy(brand, br);
    strcpy(style, st);
    bottles = b;
}
 
Port::Port(const Port &p)
{
    brand = new char[strlen(p.brand) + 1];
    strcpy(brand, p.brand);
    strcpy(style, p.style);
    bottles = p.bottles;
}
 
Port & Port::operator=(const Port &p)
{
    if (this == &p)
        return *this;
    delete brand;
    brand = new char[strlen(p.brand) + 1];
    strcpy(brand, p.brand);
    strcpy(style, p.style);
    bottles = p.bottles;
    return *this;
}
 
Port & Port::operator+=(int b)
{
    bottles += b;
    return *this;
}
 
Port & Port::operator-=(int b)
{
    bottles -= b;
    return *this;
}
 
void Port::Show() const
{
    cout << "Brand: " << brand << endl;
    cout << "Kind: " << style << endl;
    cout << "Bottles: " << bottles << endl;
}
 
std::ostream & operator<<(std::ostream &os, const Port & p)
{
    os << p.brand << ", " << p.style << ", " << p.bottles << endl;
    return os;
}
 
 
VintagePort::VintagePort(const char *br, int b, const char *nn, int y): Port(br,b)
{
    year = y;
    strcpy(nickname, nn);
 
}
Source.cpp:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "Port.h"
#include <iostream>
 
using namespace std;
 
int main()
{
 
 
    Port a("Visky", "old", 56);
    a.Show();
    VintagePort c("dsad",5,"dsada",45);
    c.Show();
    cin.get();
    return 0;
}
Ошибки компилятора:
"Port::Port(const Port &)": невозможно преобразовать аргумент 2 из "int" в "const char *"

Добавлено через 3 минуты
Цитата Сообщение от DrOffset Посмотреть сообщение
Насколько я вижу, проблема тут в том, что второй аргумент конструктора Port - const char *, в то время как из наследника туда передается int. Следовательно, если принять, что b в параметре конструктора наследника и базового класса - это одно и то же по смыслу, то конструктор наследника написать можно так:
Это первое, что пришло в голову, но я надеялся, что как-то можно передать два аргумента, которые не соответствуют порядку фактических параметров.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru