これは、 C++によるインスタンスレベルのカプセル化からのフォローアップ投稿です。
クラスを定義し、そのクラスから2つのオブジェクトを作成しました。
#include <iostream>
#include <ctime>
#include <string>
using namespace std;
class timeclass {
private:
string date;
time_t gmrawtime, rawtime;
struct tm * timeinfo;
char file_date[9];
void tm_init(int);
public:
timeclass(int);
void print_date();
};
void timeclass::tm_init(int y) {
timeinfo = gmtime(&rawtime);
timeinfo->tm_year = y - 1900; // timeinfo->tm_year holds number of years since 1900
timeinfo->tm_mon = 0;
timeinfo->tm_mday = 1;
timeinfo->tm_hour = 0;
timeinfo->tm_min= 0;
timeinfo->tm_sec= 0;
}
timeclass::timeclass(int y) {
timeclass::tm_init(y);
gmrawtime = mktime(timeinfo) - timezone;
}
void timeclass::print_date() {
strftime(file_date,9,"%Y%m%d",timeinfo);
date = string(file_date);
cout<<date<<endl;
}
/* -----------------------------------------------------------------------*/
int main()
{
timeclass time1(1991);
timeclass time2(1992);
time1.print_date(); // Prints 19920101, despite being initialized with 1991
time2.print_date(); // Prints 19920101, as expected
return 0;
}
この例は、私のメインプログラムからスライスしてさいの目に切った日付カウンターの一部ですが、私のポイントを示しています。クラスのインスタンス(time1とtime2)ごとに日付カウンターを実行したいのですが、time2オブジェクトを作成すると、time1にカプセル化されていると思っていた'timeinfo'変数がtime2コンストラクターによって上書きされるようです。
C ++はクラスレベルのカプセル化のみをサポートしていることを認識しており、同じクラスのメンバーが互いのプライベートメンバーにアクセスできるために問題が発生するのではないかと考えています。これを回避する方法はありますか?私がやりたいことを達成することができますか?ありがとう、テイラー