高度なオブジェクト指向プログラミングのクラスで本当に助けが必要です! プログラムの仕組みは次のとおりです。C++ でコーディングしており、気象ステーションを作成するプログラムを作成します。「1」を押すと、温度、風速、風向が入力されます。「2」を押すと、現在の天気予報が表示されます。「3」を押すと、天気の履歴が表示されます。「4」を押すと終了します。また、テキストファイルから出力を読み取り、コンソールに出力します...すべて正しく機能しています。私が抱えている問題は、ストリーム (<< および >>) 演算子をオーバーロードすることで、print() 関数を呼び出す必要がなくなったことです。以前は、print 関数を呼び出して、現在の天気予報と温度履歴を出力しました。自分のファイル wind.h と wind を除外しました。cpp は、まだオーバーロードを実装しようとしていないためです。さらに、1 回の投稿で十分なコードを投稿したと思います。また、プログラムは、ユーザーが英語を必要とする場合はenglish.txtから出力を読み取り、ピグラチンが必要な場合はpiglatin.txtからピグレーションを読み取ることにも言及する必要があります。
私の質問は、基本的に、オペレーターストリームのオーバーロードを正しく実装するにはどうすればよいですか?
ソース.cpp:
#include <iostream>
#include <string>
#include "temp.h"
#include "Wind.h"
#include "Language.h"
#include <fstream>
#define SIZE 10
using namespace std;
int main()
{
Temperature temp1;
win wind1;
//Temperature p;
string windDir[SIZE];
int windSpeed[SIZE];
int temp[SIZE];
//Tem p1(int temp);
int index=0;
int reply;
int reply2;
int lang;
int count=0;
string STRING1, STRING2, STRING3, STRING4, STRING5, STRING6;
fstream myEngFile;
fstream myPigFile;
ofstream out;
//Language Menu
cout<<"**** Welcome to The Michael Weather Station! \n";
cout<<"**** Elcomeway otay Ethay Ichaelmay Eatherway Ationstay! \n";
cout<<"Please enter 1 for english ";
cout<<"orway 2 orfay iglatinpay \n";
cin>>lang;
cin.clear();
switch(lang){
//English Main Menu
case 1:
//for(int count=0; count<21; count++)
for(int index=0; index<SIZE; index++){
bool menu = true;
while (menu != false){
myEngFile.open ("English.txt");
getline(myEngFile, STRING1);
cout<<STRING1<<"\n";
getline(myEngFile, STRING2);
cout<<STRING2<<"\n";
getline(myEngFile, STRING3);
cout<<STRING3<<"\n";
getline(myEngFile, STRING4);
cout<<STRING4<<"\n";
getline(myEngFile, STRING5);
cout<<STRING5<<"\n";
cin>>reply;
cin.clear();
myEngFile.close();
switch(reply){
//Gets data in English
case 1:
temp[count]=temp1.getTemp();
windSpeed[count] =wind1.getSpeed();
windDir[count] = wind1.getDirection();
cout<<" \n";
count++;
break;
//Prints data in English
case 2:
cout<<"--------------------------------\n";
//temp1.printTemp(temp[count-1]);
Temperature p = temp1.getTemp();
//cout<<temp[count-1];
cout<<p;
wind1.printWindMeasurement(windSpeed[count-1], windDir[count-1]);
cout<<" \n";
cout<<" \n";
break;
//Prints History in English
case 3:
cout<<"---------------------------------- \n";
//for(int index=SIZE%count; index<SIZE; index++){
for(int i=0; i<count; i++){
//temp1.printTemp(temp[i]);
cout<<temp[i];
wind1.printWindMeasurement(windSpeed[i], windDir[i]);
cout<<"\n";
}
break;
//Exits...In English?
case 4:
cout<<"Exiting............. \n";
menu= false;
break;
//Cheacks to see that only 1,2,3, or 4 is entered
default:
cout<<"Please enter 1,2,3, or 4 only!!! \n";
cout<<" \n";
} //Switch(reply) in english
} //While loop in english
return 0;
} //For loop in english
break;
//PigLatin Main Menu
case 2:
for(int index=0; index<SIZE; index++){
bool menu = true;
while (menu != false){
myPigFile.open ("PigLatin.txt");
getline(myPigFile, STRING1);
cout<<STRING1<<"\n";
getline(myPigFile, STRING2);
cout<<STRING2<<"\n";
getline(myPigFile, STRING3);
cout<<STRING3<<"\n";
getline(myPigFile, STRING4);
cout<<STRING4<<"\n";
getline(myPigFile, STRING5);
cout<<STRING5<<"\n";
getline(myPigFile, STRING6);
cout<<STRING6<<"\n";
cin>>reply2;
cin.clear();
myPigFile.close();
switch(reply2){
//Gets data in PigLatin
case 1:
temp[count]=temp1.getTemp2();
windSpeed[count] =wind1.getSpeed2();
windDir[count] = wind1.getDirection2();
cout<<" \n";
count++;
break;
//Prints data in PigLatin
case 2:
cout<<"----------------------------------\n";
//temp1.printTemp2(temp[count-1]);
cout<<temp[count-1];
wind1.printWindMeasurement2(windSpeed[count-1], windDir[count-1]);
cout<<" \n";
cout<<" \n";
break;
//Prints History in PigLatin
case 3:
cout<<"------------------------------------ \n";
//for(int index=SIZE%count; index<SIZE; index++){
for(int i=0; i<count; i++){
//temp1.printTemp2(temp[i]);
cout<<temp[i];
wind1.printWindMeasurement2(windSpeed[i], windDir[i]);
cout<<"\n";
}
break;
//Exits...in PigLatin?
case 4:
cout<<"exitingway............. \n";
menu= false;
break;
//Checks to see only 1,2,3, or 4 is entered
default:
cout<<"Easeplay enterway 1,2,3, orway 4 onlyway!!! \n";
cout<<" \n";
} //Switch (Reply2) in piglatin
} //While loop for PigLatin Main Menu
return 0;
} //For loop for PigLatin Main Menu
break;
} //switch(Lang)
} //Main
Temp.cpp:
#include "temp.h"
#include "Language.h"
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
// Lang La;
fstream myEngFile5;
string tempLine5;
string tempLine6;
//string tempLine1; // from language file
/**** Keep the getTemp() method, but get rid of the print method
and overload the operators there*******/
ostream &operator<<( ostream &out, const Temperature &p) //&f
{
//int far=0;
fstream myEngFile1;
string tempLine1;
myEngFile1.open ("English.txt");
myEngFile1.seekg(194);
getline(myEngFile1, tempLine1);
//La.getTempLang();
out<<p.tempLine1<<endl; // What is the Temperature?
// cin>>p; //f
return out;
//myEngFile1.close();
}
/*int Temperature::getTemp()
{
int value=0;
fstream myEngFile1;
string tempLine1;
myEngFile1.open ("English.txt");
myEngFile1.seekg(194);
getline(myEngFile1, tempLine1);
cout<<tempLine1<<"\n"; // What is the Temperature?
cin>>value;
return value;
myEngFile1.close();
}*/
int Temperature::getTemp2()
{
int value=0;
fstream myPigFile1;
string tempLine1;
myPigFile1.open ("PigLatin.txt");
myPigFile1.seekg(254);
getline(myPigFile1, tempLine1);
cout<<tempLine1<<"\n"; //What is the Temperature? in piglatin
cin>>value;
return value;
myPigFile1.close();
}
/*void Tem::printTemp(int temper)
{
fstream myEngFile5;
string tempLine5;
string tempLine6;
myEngFile5.open("English.txt");
myEngFile5.seekg(335);
getline(myEngFile5, tempLine5);
cout<<tempLine5<<temper; //The Temperature is
myEngFile5.seekg(356);
getline(myEngFile5, tempLine6);
cout<<tempLine6<<"\n"; //F
}*/
ostream &operator<<( ostream &out, const Temperature p)
{
out<<tempLine5<<p.value; //The Temperature is __
out<<tempLine6<<"\n"; //F
return out;
}
istream &operator>>( istream &in, Temperature &p)
{
//in>>p.value;
myEngFile5.open("English.txt");
myEngFile5.seekg(335);
getline(myEngFile5, tempLine5);
in>>tempLine5;
myEngFile5.seekg(356);
getline(myEngFile5, tempLine6);
in>>tempLine6;
return in;
}
/*void Tem::printTemp2(int temper)
{
fstream myPigFile4;
string tempLine5;
string tempLine6;
myPigFile4.open("PigLatin.txt");
myPigFile4.seekg(445);
getline(myPigFile4, tempLine5);
cout<<tempLine5<<temper; //The temperature is __ (in piglatin)
myPigFile4.seekg(473);
getline(myPigFile4, tempLine6);
cout<<tempLine6<<"\n"; //fay
}*/
温度:
#ifndef TEMP
#define TEMP
#include <fstream>
#include <string>
using namespace std;
//int index=0;
class Temperature
{
int value;
//char unit;
public:
string tempLine1;
int getTemp();
int getTemp2();
Temperature()
{
value=0;
//unit='F';
}
Temperature(int v/*, char u*/)
{
value=v;
//unit=u;
}
friend ostream &operator<<(ostream &out, const Temperature &p); // needs 'friend' i think
friend istream &operator>>(istream &in, Temperature &p);
//friend ostream operator<<(ostream out, const Temperature p);
//friend istream operator>>(istream in, Temperature &p);
//void printTemp(int temper);
//void printTemp2(int temper);
};
#endif