嗨到了我不确定如何继续的地步。 我的计划的主要目标:
1)从文件(.csv)中读取5个值
日期(3个变量的类 - 日,月,年)
时间(有2个变量的课程 - 分钟,小时)
浮动wSpeed(在课堂天气下)
浮动温度(在天气下)
浮动solarRadiation(在天气下)
2)放入一个对象
3)将其放入载体
主要
int main()
{
string filename;
ifstream input;
Vector<weather> windlog; //have a vector called windlog
cout <<"enter file name:" <<endl;
cin >> filename;
input.open(filename.c_str());
input.ignore(500,'\n');
string sDay, sMonth, sYear, sHH, sMM, wind, solar, temperature;
date d1;
time t1;
weather w1;
getline(input, sDay,'/'); //stop getting input at '/'
getline(input, sMonth,'/');
getline(input, sYear,' ');
getline(input, sHH,':');
getline(input, sMM,',');
int day1 = atoi(sDay.c_str()); //convert string to int (atoi)
int month1 = atoi(sMonth.c_str());
int year1 = atoi(sYear.c_str());
int hour1 = atoi(sHH.c_str());
int min1 = atoi(sMM.c_str());
d1.setDate(day1,month1,year1); //set date using converted string
t1.setTime(min1, hour1); //set time using converted string
// skip the first 9 columns of .csv file
for(int i=0; i<9; i++)
{
input.ignore(50, ','); //ignore ','
}
//location now at wSpeed date of .csv file
getline(input, wind,',');
float wS1 = atof(wind.c_str()); // convert string to float
//next location is the location solarRadiation
getline(input, solar,',');
float sR1= atof(solar.c_str()); // convert string to float
//move 5 columns
for(int i=0; i< 5; i++)
{
input.ignore(50, ',');
}
//at location of temperature
getline(input, temperature,'\n');
float temperature1 = atof(temperature.c_str()); // convert string to
float
//when i print it out, it gives me the correct data
/*
cout << d1; //date class that contains dd,mm,yy
cout << t1;//time class that contains hh, mm
cout << wS1 ;
cout << sR1;
cout << temperature1 << endl;
*/
//trying to put these data into an object file: weather
//i tried doing something like this
weather obj1(wS1, sR1, temperature1, d1, t1);
cout << objt1;//gives me weird values but when i cout each variable, it
works out fine
不会写整个日期/时间.h / cpp因为我认为它会占用太多空间
date.h
public:
setday, setmonth, setyear, setdate(day,month,year);
getday,getmonth,getyear;
private: day,month,year;
time.h中
public:
setminute, sethour, settime(minute,hour);
getminute,get hour;
private: minute, hour;
天气等级(我遇到问题)
·H
#ifndef H_WEATHER
#define H_WEATHER
#include <iostream>
#include <string>
#include "time.h"
#include "date.h"
using namespace std;
class weather: public date, time
{
friend ostream& operator << (ostream&, const weather&);
friend istream& operator >> (istream&, weather&);
public:
weather();
weather(float wSpeed, float solarRadiation, float temperature,
date d1, time t1);
~weather();
void setWspeed(float wSpeed);
void setSolarRadiation(float solarRadiation);
void setTemperature(float temperature);
float getWspeed() const ;
float getSolarRadiation() const;
float getTemperature() const;
void setWeather(float wS, float sR, float t,date d1, time t1);
date getDate();
time getTime();
date d1;//mm, hh
time t1;//dd,mm,yy
private:
float wSpeed;
float solarRadiation;
float temperature;
};
#endif
.CPP
#include <iostream>
#include "weather.h"
#include "date.h"
#include "time.h"
weather::weather()
{
wSpeed=0;
solarRadiation=0;
temperature = 0;
}
weather::weather(float wS, float sR, float t, date d1, time
t1):date(day,month,year), time(hours,minute)
{
wS = wS;
sR = sR;
t =t;
d1.setDate(day,month, year);
t1.setTime(hours,minute);
}
weather::~weather() {}
void weather::setWeather(float wS, float sR, float t)
{
wSpeed =wS;
solarRadiation=sR;
temperature =t;
}
void weather::setWspeed(float wS)
{
wSpeed =wS;
}
void weather::setSolarRadiation(float sR)
{
solarRadiation=sR;
}
void weather::setTemperature(float t)
{
temperature = t;
}
void weather::setWeather(float wS,float sR, float t, date d1, time
t1)
{
wSpeed=wS;
solarRadiation=sR;
temperature = t;
}
float weather::getWspeed() const
{
return wSpeed;
}
float weather::getSolarRadiation() const
{
return solarRadiation;
}
float weather::getTemperature() const
{
return temperature;
}
ostream& operator<< (ostream& osObject, const weather& weather1)
{
osObject << weather1.wSpeed <<" " << weather1.solarRadiation <<""
<< weather1.temperature << weather1.d1 << weather1.t1 ;
return osObject;
}
istream& operator >> (istream& isObject, weather& weather1)
{
isObject >> weather1.wSpeed>> weather1.solarRadiation >>
weather1.temperature >> weather1.d1 >> weather1.t1;
return isObject;
}
如何将值放入对象?它是否正确我必须使用继承所以我可以重载天气构造函数,以便它可以采取日期和时间类?
答案 0 :(得分:0)
你几乎拥有它,但是......
您不必继承以便能够使用成员对象。在
class weather: public date, time
: public date, time
没有必要。这也意味着天气是一个没有意义的日期和时间。除非有一些逻辑is-a relationship。
weather::weather(float wS, float sR, float t, date d1, time t1):
date(day,month,year), // you want the member name now, not the type
// plus where did day month and year come from?
time(hours,minute) // not ditto, but close enough.
{
wS = wS; // self assigns. In other word, does nothing
sR = sR; // ditto
t =t; // ditto
d1.setDate(day,month, year); // where did day month and year come from?
t1.setTime(hours,minute); // not ditto, but close enough.
}
没有做任何事情。它主要具有分配给自己的参数。这没有意义,因为它们是相同的变量,它们是临时变量。您要做的是分配成员变量。这是一个构造函数,所以你不妨一直使用Member Initializer List
weather::weather(float wS,
float sR,
float t,
date d1,
time t1) :
wSpeed(wS),
solarRadiation(sR),
temperature(t),
d1(d1), // note this is about the only time you can use the same name twice.
// Enjoy it. But don't do it. It confuses people.
t1(t1) // ditto
{
}
然后我们下到setWeather
void weather::setWeather(float wS, float sR, float t)
{
wSpeed =wS;
solarRadiation=sR;
temperature =t;
}
与班级
中的定义不符void setWeather(float wS, float sR, float t,date d1, time t1);
显然我们想要更像
的东西void weather::setWeather(float wS, float sR, float t, date pd1, time pt1)
{
wSpeed = wS;
solarRadiation = sR;
temperature = t;
d1 = pd1;
t1 = pt1;
}
注意我没有在参数列表中重复d1
。我改了它,所以我不会d1 = d1;
没有任何用处。最好为成员和参数提供更具描述性的名称。 d1
传达关于变量是否以及如何使用变量的零信息。