Форум программистов, компьютерный форум 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. Он кладет их на доску так, чтобы не возникало наложений, и его выигрыш вычисляется как сумма произведений чисел, накрытых каждой из костей домино. Например, существует два способа положить две кости домино на доску размера 2x2. 1 4 3 2 Для доски в лучшем случае сумма составляет 1x3 + 4x2 = 11. Если игрок выберет другой способ , то сумма...
C++ Распределить код на функции В общем,такая проблема,нужно создать перегруженную функцию,для кода,но когда я начинаю делать это,то появляется масса ошибок,я не знаю почему. Код написан и отлично работает,единственное,что осталост,это разсегментировать его на ПЕРЕГРУЖЕННЫЕ функции,пожалуйста выручите меня и если можно , то объясните как вы это сделали,спасибо зараннее КОД : #include <iostream> #include <ctime> using... подробнее

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