私は多重継承に問題があります。多重継承問題C++
#pragma once
#include <iostream>
#include <list>
class Data {
protected:
int year;
int month;
int day;
public:
Data();
Data(int, int, int);
void show();
};
class Person : virtual public Data {
protected:
std::string Name;
std::string Sur_name;
public:
Person();
Person(std::string, std::string, int, int, int);
void show();
};
class Waiter : public Person {
protected:
int category;
public:
Waiter();
Waiter(std::string, std::string, int d, int m, int y, int c);
void show();
};
class TypeOfDish {
protected:
std::string typeDish;
public:
TypeOfDish();
TypeOfDish(std::string);
void show();
};
class Course : public TypeOfDish {
protected:
double price;
std::string NameofCourse;
public:
Course();
Course(std::string, double, std::string);
void show();
};
class Order : public Course, public Waiter, virtual public Data{
public:
Order();
void show();
};
////////////////////////////////////////
#include "stdafx.h"
#include "Class.h"
#include <string>
Data::Data() {
day = 21;
month = 10;
year = 2017;
}
Data::Data(int d, int m, int y) {
this->day = d;
this->month = m;
this->year = y;
}
void Data::show() {
std::cout << "Hello from Data.Date of birth " << day << " " << month << " " << year << std::endl;
}
Person::Person() : Data() {
day = 22;
month = 10;
year = 2017;
Name = "Ivan";
Sur_name = "Petrov";
}
Person::Person(std::string n, std::string s, int d, int m, int y) : Data(d,m,y) {
this->Name = n;
this->Sur_name = s;
}
void Person::show() {
std::cout << "Hello from Person " << Name << " " << Sur_name << std::endl;
std::cout << "Hello from Person.Date of birth " << day << " " << month << " " << year << std::endl;
}
Waiter::Waiter() : Person() {
category = 3;
}
Waiter::Waiter(std::string n, std::string s, int d, int m, int y, int c) : Person(n,s,d,m,y) {
this->category = c;
}
void Waiter::show() {
std::cout << "Hello from Waiter " << Name << " " << Sur_name << std::endl;
std::cout << "Hello from Waiter.Date of birth " << day << " " << month << " " << year << std::endl;
std::cout << "Hello from Waiter.Category " << category << std::endl;
}
TypeOfDish::TypeOfDish() {
typeDish = "";
}
TypeOfDish::TypeOfDish(std::string type) {
this->typeDish = type;
}
void TypeOfDish::show() {
std::cout << "The type of dish is " << typeDish << std::endl;
}
Course::Course() : TypeOfDish() {
price = 12.32;
NameofCourse = "Borsh";
}
Course::Course(std::string name, double pri, std::string type) : TypeOfDish(type) {
this->NameofCourse = name;
this->price = pri;
}
void Course::show() {
std::cout << typeDish << ":" << NameofCourse << std::endl;
}
Order::Order() : Data(), Course(), Waiter() {
std::cout << ".";
}
void Order::show() {
std::cout << "Hello from Order " << Name << " " << Sur_name << std::endl;
std::cout << "Hello from Order.Date of birth " << Waiter::day << " " << Waiter::month << " " << Waiter::year << std::endl;
std::cout << "Hello from Order.Category " << category << std::endl;
std::cout << "Hello from Order.Date of order " << day << " " << month << " " << year << std::endl;
std::cout << "Hello from Order" << typeDish << ":" << NameofCourse << std::endl;
}
私は3つの基本的なクラス - ウェイター、コースとデータ、派生命令を持っています。 ウェイター、コース、データから画面上のすべてのフィールドを見たい。 私は名前、姓、カテゴリ、ウェイターからの生年月日、コースからのすべてのフィールド、そして最も重要な注文データを意味します。 私はプログラムを実行するとすべてが正常ですが、それは私が望むように動作しません。 生年月日と注文日の同じデータ。
私はこの問題をどのように解決できるか知りたいと思います。
いずれの解決策も高く評価されます。ありがとう。
私は、正確に何が問題であるかを知ることは役に立ちます。 「すべてがうまくいきます」と答えた後、「好きなように動作しません」と言うと、困ってしまいます。 – kabanus
人は日付ですか?あなたのクラスデザインを再考してください。 –
私は@ manni66に同意します。多くのクラスは、他のクラスとは関連していません。注文**はウェイターではなく、**デイトではありません。 – HJuls2