Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 09.10.2018
Сообщений: 87
1

Явный вызов конструктра

15.04.2020, 09:13. Показов 2360. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Вот мое задание: создать файлы main.h и main.cpp. В файле main.h определить с помощью ключевого слова class объект Ship, описать конструктор объекта, аргументы которого будут инициализировать все данные объекта. Описать конструктор объекта по умолчанию (без аргументов), проинициализировав все данные. Описать в объекте функцию void Print() с открытым уровнем доступа (public), которая будет выводить данные на экран.
В main.cpp определить конструктор объекта, инициализирующий все данные объекта значениями аргументов. В теле конструктора используем функцию strcpy (стр1, стр2) для копирования строки наименования корабля. Затем определить функцию void SHIP::Print(). Далее создать главную функцию программы int main(). Внутри нее создать объект SHIP, указав все значения данных объекта. Вывести данные объекта на экран, вызвав функцию Print. Далее создать динамический объект SHIP с помощью обычного конструктора и оператора new. Вывести данные объекта на экран и удалить его с помощью оператора delete. Затем написать функцию ввода данных в объект с клавиатуры void Person::Input(). И затем создать объект SHIP с помощью конструктора по умолчанию и ввести данные в объект с клавиатуры, вызвав функцию Input .
То, что у меня получилось я прилагаю.
Main.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
//#include <iostream>
#include <string>
class Ship
{
private:
    std::string name;
    //char* name;
    int displacement;
    //char* type;
    std::string type;
 
public:
    Ship (const char* valueName, int valueDisplacement, const char* valueType); // конструктор с параметрами
    
    Ship () // конструктор по умолчанию
    {
        //name = 0; //чтобы не было мусора в программе,выводим 0
        //displacement = 0; 
        //type = 0;
    }
 
    void Print(); // функция вывода данных на экран
 
    void Input(); // функция ввода данных с клавиатуры
};
Main.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
#define _CRT_SECURE_NO_WARNINGS
 
#include <cstdlib>
#include <string>
#include <iostream>
#include "main.h"
#include <Windows.h>// чтобы работала функция SetConsole
using namespace std;
 
Ship::Ship(const char* valueName, int valueDisplacement, const char* valueType) //конструктор с параметрами
    : name(valueName), displacement (valueDisplacement), type(valueType)  // список инициализации конструктора
 
{
    //name = new char[strlen(valueName) + 1];// выделяется память для массива символов, добавляем 1, чтобы получить достаточно памяти
    //strcpy(name, valueName); // копируем строку valueName в строку name
    //displacement = valueDisplacement; // параметру displacement присваиваем значение valueDisplacement
    //type = new char[strlen(valueType) + 1]; // выделяется память для массива символов, добавляем 1, чтобы получить достаточно памяти
    //strcpy(type, valueType); // копируем строку valueType в строку type
};
 
void Ship:: Print() // функция вывода данных на экран
{
    cout << "\nНаименование\t" << name << "\nВодоизмещение\t" << displacement << "\nТип\t\t" << type << endl;
}
 
void Ship:: Input () // функция ввода данных с клавиатуры
{
    cin >> name >> displacement >> type ;
}
 
int main()
{
    setlocale(LC_CTYPE, "rus"); SetConsoleCP(1251); SetConsoleOutputCP(1251); // для вывода информации на русском языке
    Ship firstship("Титаник", 52310, "пассажирский");
    firstship.Print(); // выводим данные на экран
 
    Ship *Ship1;
    Ship1 = new Ship("Аврора", 6731, "крейсер"); // создание объекта,  вызов конструктора с тремя параметрами
    Ship1->Print(); // выводим данные на экран
    delete Ship1; // освобождаем память
    
    Ship *Ship2;
    Ship2 = new Ship(); //создание объекта,  вызов конструктора без парамтров
    Ship2->Input(); // вводим данные с клавиатуры
    Ship2->Print(); // выводим данные на экран
    
}
Но преподаватель пишет, что отсутствует явный вызов конструктора без параметров. ( есть 2 косвенных вызова (через указатель) и один с параметрами).
Я так поняла, что нужно изменить строки 42-45.
Прошу помощи у Вас.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.04.2020, 09:13
Ответы с готовыми решениями:

Явный вызов деструктора
Есть класс Person, с полями string,string,long. Исходные данные хранятся в файле. Нужно сделать...

Явный вызов деструктора
Добрый вечер всем! Я раньше читал статью о деструкторах, и там говорилось что можно явно вызвать...

Явный вызов конструкторов перемещения
Для перемещения предлагается такая запись: TYPE a; TYPE b = std::move(a); Но при этом, если у...

Явный вызов и объявление статических полей
1) Как сделать невозможным явный вызов деструктора и операторов? class MyClass { private : int...

2
Неэпический
17870 / 10635 / 2054
Регистрация: 27.09.2012
Сообщений: 26,737
Записей в блоге: 1
15.04.2020, 09:20 2
Лучший ответ Сообщение было отмечено Ann1984 как решение

Решение

Цитата Сообщение от Ann1984 Посмотреть сообщение
Я так поняла, что нужно изменить строки 42-45.
Видимо, так:
C++
1
2
3
    Ship Ship2;//создание объекта,  используется конструктор без парамтров
    Ship2.Input(); // вводим данные с клавиатуры
    Ship2.Print(); // выводим данные на экран
1
Вездепух
Эксперт CЭксперт С++
11696 / 6375 / 1724
Регистрация: 18.10.2014
Сообщений: 16,071
15.04.2020, 11:32 3
Цитата Сообщение от Ann1984 Посмотреть сообщение
Но преподаватель пишет, что отсутствует явный вызов конструктора без параметров.
Ваш преподаватель несет какую-то терминологическую чушь. В С++ принципиально нет возможности выполнить явный вызов конструктора.

Ближе всего к "явному вызову конструктора" подбирается делегация из одного конструктора в другой, но даже и это формально не является "явным вызовом конструктора".
0
15.04.2020, 11:32
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2020, 11:32
Помогаю со студенческими работами здесь

Явный вызов конструктора
Всем привет. Есть примерно такой код: 1. Мой класс class my_class { // ... }; 2....

Явный вызов перегрузки
Всем привет, можно ли как-то указать ораклу явно какую перегрузку использовать?

Явный вызов оператора или функции доступа невозможен (xNet & Fleck)
Добрый день, форумчане. Нарыл небольшой проект Steam trade botа'а, но в нём имеются несколько...

явный деструктор
class TIMER { public: TIMER() { std::cout &lt;&lt; &quot;constructor&quot; &lt;&lt; std::endl; } ~TIMER()...

Явный метод Эйлера
Помогите избавится от ошибок: 1)При создании системы равноотстоящих точек с шагом r. i - пишет,...

Явный и неявный конструктор
явный конструктор-это...? неявный конструктор-это...? спасибо.


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru