Переменные-члены C++ не обновляются - Noob здесь
Я уже скрывался и просматривал здесь некоторое время, но это мой первый пост. Надеюсь, у меня есть правила и формат.
Я кодирую уже несколько месяцев, так что все еще довольно нов в этом. Прямо сейчас я пытаюсь реализовать очень простой класс парковочных счетчиков, имеющий только 2 функции. Один, чтобы вставить четверти, и один, чтобы проверить оставшееся время. Переменными-членами являются maxTime, rate и time.
Я получил некоторые функциональные возможности, но они продолжали давать мне странные результаты с моей функцией checkTime. Я проверил почти каждую строку и понял, что после выхода из конструктора введенные значения исчезают и заменяются действительно длинным числом. Я не могу понять, почему это происходит. Я не первый раз использую классы, конструкторы, создание объектов и тому подобное, и я не вижу, что я сделал по-другому на этот раз.
Может кто-нибудь из вас, эксперты, даст мне знать, где я облажался?
Вот мой заголовочный файл:
#ifndef PARKINGMETER_H_INCLUDED
#define PARKINGMETER_H_INCLUDED
#ifndef PARKINGMETER_H_INCLUDED
#define PARKINGMETER_H_INCLUDED
class ParkingMeter {
private:
int maxTime;
double time, rate;
public:
ParkingMeter();
ParkingMeter(int, double);
~ParkingMeter();
void insertQtrs(int);
double checkTime(double);
double getTime();
void setTime(double);
};
И вот моя реализация:
#include <iostream>
#include <stdexcept>
#include <ctime>
#include "ParkingMeter.h"
using namespace std;
ParkingMeter::ParkingMeter() { //default constructer
maxTime = 120;
rate = .25;
time = 0;
}
ParkingMeter::ParkingMeter (int maxTime, double rate) { //constructor
maxTime = maxTime;
rate = rate;
cout<<"maxTime is "<<maxTime<<endl;
cout<<"rate is "<<rate<<endl;
}
ParkingMeter::~ParkingMeter(){ //destructor
}
void ParkingMeter:: insertQtrs(int quarters){
ParkingMeter test(this->maxTime, this->rate);
cout<<"maxTime is "<<test.maxTime<<endl;
cout<<"rate is "<<test.rate<<endl;
cout<<"You have inserted: "<<quarters<<" quarters."<<endl;
double time = quarters * (rate * 60);
if ( time > 120)
time = 120;
this ->setTime(time);
}
double ParkingMeter:: checkTime (double startTime){
ParkingMeter test(this->maxTime, this->rate);
double elapsed = clock() - startTime;
// test.maxTime = this->maxTime;
cout<<"test: "<<test.maxTime<<endl;
cout<<"elapsed time: "<<elapsed<<endl;
cout<<"meter time: "<<time<<endl;
cout <<"Your remaining time is: "<< (time - (elapsed / ((double)CLOCKS_PER_SEC)));
}
/*double ParkingMeter:: getTime (){
int time = this-> maxTime;
cout<<"time: "<<time<<endl;
return time;
}*/
void ParkingMeter:: setTime (double time){
this ->time = time;
}
int main () {
double maxTime, rate;
int quarters;
char y;
cout<<"Please enter the max parking time and rate, separated by a space: "<<endl;
cin>>maxTime>>rate;
ParkingMeter meter(maxTime, rate);
cout<<"Please enter the amount of quarters you wish to enter: "<<endl;
cin>>quarters;
clock_t start = clock();
meter.insertQtrs(quarters);
cout<<"Please enter Y to check remaining time: "<<endl;
cin>>y;
if (y == 'y'){
double startTime = start;
cout<<"starttime: "<<startTime<<endl;
meter.checkTime (startTime);
}
}
1 ответ
Вот ваша проблема:
ParkingMeter::ParkingMeter (int maxTime, double rate) { //constructor
this->maxTime = maxTime;
this->rate = rate;
// ^^^^^^ note this!
вы можете использовать список инициализатора, и в этом случае вы можете (и должны) удалить this->
, Чтобы избежать проблем, я предлагаю вам использовать разные имена для переменных-членов, например, добавить _
:
ParkingMeter::ParkingMeter (int maxTime, double rate)
: maxTime_( maxTime ), rate_( rate )
{
cout<<"maxTime is "<<maxTime_<<endl;
cout<<"rate is "<<rate_<<endl;
}