Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2020, 18:20   #1
Александр222
Пользователь
 
Регистрация: 15.04.2020
Сообщений: 59
Вопрос C++. Проверка кода

Задача
image_2020-10-09_221742.jpg

Когда вывожу прибавление на 1, все выводится верно.
Когда вывожу на экран прибавление n, то выдает что-то вроде -8474738337 и тд.
Наследование только начали проходить. Проверьте, пожалуйста код. Есть подозрения, что там что-то с конструктором, никак не могу понять, как его писать при наследовании.

main.cpp
Код:
#include <iostream>
#include "Triad.h"

int main(){

    Triad Triad(1, 2, 3);

    std::cout << Triad.GetH() << std::endl;
    std::cout << Triad.GetM() << std::endl;
    std::cout << Triad.GetS() << std::endl;

    Time Time (1, 2, 3);

    int n;
    std::cout << "n="; std::cin >> n;
    std::cout << Time.GetH() << std::endl;
    std::cout << Time.GetM() << std::endl;
    std::cout << Time.GetS() << std::endl; 
}
Triad.h
Код:
#pragma once
class Triad{

private:
	int h;
	int m;
	int s;

public:
	Triad() = default;
	Triad (int h, int m, int s);
	Triad(const Triad& T);

	void SetH(int h);
	void SetM(int m);
	void SetS(int s);

	virtual int GetH();
	virtual int GetM();
	virtual int GetS();
};

class Time : public Triad{

private:
	int hours;
	int minuts;
	int seconds;
	int n;

public:
	Time() = default;
	Time(int hours, int minuts, int seconds);
	Time(int h, int m, int s, int hours, int minuts, int seconds);
	Time(const Time& other);

	void SetHours(int hours);
	void SetMinuts(int minuts);
	void SetSeconds(int seconds);

	int GetH();
	int GetM();
	int GetS();
};
Triad.cpp
Код:
#include "Triad.h"

Triad::Triad(int h, int m, int s) : h(h), m(m), s(s) {}
Triad::Triad(const Triad& T) : h{ h }, m{ m }, s{ s } {}

Time::Time(int hours, int minuts, int seconds) : hours{ hours }, minuts{ minuts }, seconds{ seconds } {};
Time::Time(int h, int m, int s, int hours, int minuts, int seconds) : Triad(h, m, s), hours{ hours }, minuts{ minuts }, seconds{ seconds } {};
Time::Time(const Time& other) : Triad{ other }, hours{ other.hours }, minuts{ other.minuts }, seconds{ other.seconds } {};

void Time::SetHours(int hours){}
void Time::SetMinuts(int minuts){}
void Time::SetSeconds(int seconds){}

void Triad::SetH(int h){}

void Triad::SetM(int m){}

void Triad::SetS(int s){}

int Triad::GetH() {	return ++h; }

int Triad::GetM(){ return ++m; }

int Triad::GetS(){ return ++s; }

int Time::GetH() {	return hours + n; }

int Time::GetM() {	return minuts + n; }

int Time::GetS() { return seconds + n; }
Александр222 вне форума Ответить с цитированием
Старый 09.10.2020, 19:14   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Поле n остается непроинициализированным, поправил, но совершенно не уверен в правильности с точки зрения стандарта (забыл уже плюсы):
Код:
#include <iostream>

using namespace std;

class Triad{

protected:
    int h;
    int m;
    int s;

public:
    Triad() = default;
    Triad (int h, int m, int s);
    Triad(const Triad& T);

    void SetH(int h);
    void SetM(int m);
    void SetS(int s);

    virtual int GetH();
    virtual int GetM();
    virtual int GetS();
};

class Time : public Triad{

private:
    int n;

public:
    Time() = default;
    Time(int hours, int minutes, int seconds, int n);
    Time(const Time& other);

    int GetM();
    int GetS();
};

Triad::Triad(int h, int m, int s) : h(h), m(m), s(s) {}
Triad::Triad(const Triad& T) : h{ h }, m{ m }, s{ s } {}

Time::Time(int hours, int minutes, int seconds, int n) : Triad{ hours, minutes, seconds }, n{ n } {};
Time::Time(const Time& other) : Triad{ other }, n{ other.n } {};

void Triad::SetH(int h) { h = h; }
void Triad::SetM(int m) { m = m; }
void Triad::SetS(int s) { s = s; }

int Triad::GetH() { return ++h; }
int Triad::GetM() { return ++m; }
int Triad::GetS() { return ++s; }

int Time::GetM() { return m + n; }
int Time::GetS() { return s + n; }

int main(){

    Triad tr(1, 2, 3);

    std::cout << tr.GetH() << std::endl;
    std::cout << tr.GetM() << std::endl;
    std::cout << tr.GetS() << std::endl;

    int n;
    std::cout << "n = "; std::cin >> n;

    Time t(1, 2, 3, n);

    std::cout << t.GetH() << std::endl;
    std::cout << t.GetM() << std::endl;
    std::cout << t.GetS() << std::endl;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 09.10.2020, 19:22   #3
Александр222
Пользователь
 
Регистрация: 15.04.2020
Сообщений: 59
По умолчанию

BDA, Спасибо!
Александр222 вне форума Ответить с цитированием
Старый 10.10.2020, 07:40   #4
Black Fregat
Программист
Участник клуба
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,772
По умолчанию

Зачем Вы завели в классе Time отдельные поля для часов, минут и секунд?
В чём тогда смысл наследования от Triad?

Совмещать get с инкрементом - очень плохая идея
Black Fregat вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка кода pigeon890 Python 2 24.01.2019 13:39
Проверка кода на ошибки в С++ Cyber321 Помощь студентам 19 26.11.2018 10:17
Проверка кода Сайхан JavaScript, Ajax 5 15.06.2016 00:45
Проверка кода Ёжик в тумане Паскаль, Turbo Pascal, PascalABC.NET 5 14.01.2013 18:56
Проверка кода С++ AlekCaHdpyLLlka Visual C++ 4 11.05.2012 22:35