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

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

Войти
Регистрация
Восстановить пароль
 
bambique
1 / 1 / 2
Регистрация: 02.04.2015
Сообщений: 169
#1

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

04.04.2016, 00:26. Просмотров 355. Ответов 6
Метки нет (Все метки)

У меня есть в классе конструктор по умолчанию:
C++
1
Port(const char * br = "none",const char * st = "none",int b = 0);
Я создал производный от этого класс в котором также используется динамическое выделение памяти и в конструкторе производного класса я хочу вызвать конструктор базового класса, но только с двумя аргументами например:
C++
1
2
3
4
VintagePort::VintagePort(const char *br, int b, const char *nn, int y): Port(br,b)
{
 
}
Компилятор говорит, что так сделать нельзя так как такого констуктора нету, все правильно в принципе. Нельзя ли как-то обойтись без ещё одного конструктора? Я не вижу вариантов, но мало ли.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.04.2016, 00:26     Передача аргументов в конструктор
Посмотрите здесь:

Пустой конструктор без аргументов - C++
Всем доброго времени суток. Я сейчас в процессе изучения С++, читаю книгу Лафоре "Объектно-ориентированное программирование в С++". На...

Как написать конструкторы копирования, инициализации и конструктор без аргументов? - C++
Как написать конструкторы копирования, инициализации и конструктор без аргументов? Вот код #include <iostream> using namespace...

Как принять заранее неизвестное количество аргументов и передать их в конструктор? - C++
Допустим есть функция которая создает объект template<typename T> T* createObject(typename ...params) { return new...

Передача аргументов в ф-ию - C++
void test(const T& a) {} Это понятно, а что это за запись: void test(T const& a) {} И как понять ссылку на ссылку,...

передача аргументов - C++
Здравствуйте,объясните пожалуйста,на примерах кода,что означает передача аргументов по ссылке, по значению,передача копий аргументов?

Передача аргументов в функции - C++
Ребят, никогда раньше не задумывался каким же образом передаются аргументы. Сейчас же дошел до передачи аргументов через указатель и...

Передача аргументов функции - C++
В книге Стенли Липпмана C++ Primer дошел до программы, которая выполняет замену слов в одном файле, которые указаны в другом. Например, ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
hoggy
6369 / 2587 / 452
Регистрация: 15.11.2014
Сообщений: 5,722
Завершенные тесты: 1
04.04.2016, 00:33     Передача аргументов в конструктор #2
C++
1
Port(const char * br = "none",const char * st = "none",int b = 0, int y = 0);

C++
1
2
3
4
VintagePort::VintagePort(const char *br, const char *nn, int b, int y): Port(br,b)
{
 
}
TheCalligrapher
С чаем беда...
Эксперт CЭксперт С++
3635 / 1910 / 503
Регистрация: 18.10.2014
Сообщений: 3,477
04.04.2016, 07:31     Передача аргументов в конструктор #3
Цитата Сообщение от bambique Посмотреть сообщение
Компилятор говорит, что так сделать нельзя
Это какая-то мистика. Показывайте больше кода. В том, что вы привели, никаких проблем не видно.
Serg_o_Grey
65 / 65 / 23
Регистрация: 29.03.2016
Сообщений: 320
04.04.2016, 07:44     Передача аргументов в конструктор #4
а почему наслуедется Port(br,b) а не Port(br, st, b)?

Добавлено через 2 минуты
и разве наследование не так производится?:
C++
1
2
3
4
VintagePort::VintagePort(const char *br, const char *nn, int b, int y): Port 
{
 
}
DrOffset
6913 / 4106 / 933
Регистрация: 30.01.2014
Сообщений: 6,903
04.04.2016, 08:34     Передача аргументов в конструктор #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от bambique Посмотреть сообщение
У меня есть в классе конструктор
Насколько я вижу, проблема тут в том, что второй аргумент конструктора Port - const char *, в то время как из наследника туда передается int. Следовательно, если принять, что b в параметре конструктора наследника и базового класса - это одно и то же по смыслу, то конструктор наследника написать можно так:
C++
1
2
3
VintagePort(const char *br, int b, const char *nn, int y): Port(br, "none", b)
{
}
bambique
1 / 1 / 2
Регистрация: 02.04.2015
Сообщений: 169
05.04.2016, 16:11  [ТС]     Передача аргументов в конструктор #6
Цитата Сообщение от 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 в параметре конструктора наследника и базового класса - это одно и то же по смыслу, то конструктор наследника написать можно так:
Это первое, что пришло в голову, но я надеялся, что как-то можно передать два аргумента, которые не соответствуют порядку фактических параметров.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2016, 16:31     Передача аргументов в конструктор
Еще ссылки по теме:

Передача аргументов функции - C++
Как передать функции переменную неизвестного типа?

Передача аргументов в функцию - C++
Доброго всем дня! Я немного не понял листинг программы из учебника Р.Лафоре: #include&quot;stdafx.h&quot; #include&lt;iostream&gt; ...

Передача аргументов по значению - C++
как сделать что бы все аргументы передавались по значению то есть что бы содержимым параметров являлись копии значений соответствующих...

Передача аргументов функции - C++
Всем привет. Писал код не зная, правильно ли это. В общем застрял на составлении прототипов функции и функции мэин. И ещё, можно ли так как...

Передача аргументов в программу - C++
Хочу передать аргументы в программу, если использовать такую сигнатуру: int _tmain(int argc, _TCHAR* argv) //---------------- ...


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

Или воспользуйтесь поиском по форуму:
DrOffset
6913 / 4106 / 933
Регистрация: 30.01.2014
Сообщений: 6,903
05.04.2016, 16:31     Передача аргументов в конструктор #7
Цитата Сообщение от bambique Посмотреть сообщение
но я надеялся, что как-то можно передать два аргумента, которые не соответствуют порядку фактических параметров.
Нельзя.
Yandex
Объявления
05.04.2016, 16:31     Передача аргументов в конструктор
Ответ Создать тему
Опции темы

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