クラスのメンバ変数を参照時に更新させたい
Posted: 2014年4月17日(木) 22:27
#include <iostream>
#include <string>
using namespace std;
class Tim {
class Int {
int x;
public:
Int() : x(0) {}
operator int() { return ++x; }
Int& operator=(int k) { x = k; return *this; }
};
public:
Int hour;
};
int main()
{
Tim tim;
tim.hour = 100;
string s;
while (getline(cin, s))
cout << tim.hour << endl;
return 0;
}
#pragma once
#include <time.h>
/* void main() {
Clock c;
cout << c.year; // return this year;
cout << c.second; // return now second [s];
}
*/
class Clock {
public:
class C_Order {
public:
static SYSTEMTIME st;
static Clock *c;
static int s_order;
int order;
// int val;
enum S_ORDER {
YE, MO, WE, DA, HO, MI, SE, MS
};
C_Order() {
order = ++s_order;
}
operator int() {
GetLocalTime(&st);
switch(order) {
case YE : return st.wYear;
case MO : return st.wMonth;
case WE : return st.wDayOfWeek;
case DA : return st.wDay;
case HO : return st.wHour;
case MI : return st.wMinute;
case SE : return st.wSecond;
case MS : return st.wMilliseconds;
default : return -1;
}
}
}year, month, week, day, hour, minute, second, mseconds;
};
SYSTEMTIME Clock::C_Order::st;
int Clock::C_Order::s_order = Clock::C_Order::YE-1;
/*
#include <Windows.h>
#include <string>
#include <iostream>
using namespace std;
int main() {
Clock c;
cout << c.year << endl;
cout << c.month << endl;
cout << c.day << endl;
cout << c.week << endl;
cout << c.hour << endl;
cout << c.minute << endl;
cout << c.second << endl;
cout << c.mseconds << endl << endl;
Sleep(2100);
cout << c.second << endl;
cout << c.mseconds << endl << endl;
Sleep(2100);
cout << c.second << endl;
cout << c.mseconds << endl;
return 0;
}
*/
class Clock {
public:
int Getter() {
return 1234; // hour, minuteなどの時間を返したい.
}
__declspec(property(get = Getter))
int year, month, week, day, hour, minute, second, msecond;
};
#include <time.h>
/* void main() {
Clock c;
cout << c.year; // return this year, update always when refering
cout << c.second; // return now second [s];
}
*/
class Clock {
private:
static SYSTEMTIME st;
static WORD *pst;
public:
class C_Order {
private:
static int s_order;
int order;
enum S_ORDER {
YE = 0, MO, WE, DA, HO, MI, SE, MS, SO_MAXSIZE
};
public:
C_Order() {
order = ++s_order;
if(s_order == MS) {
s_order = -1 ; //リセット
}
}
operator int() {
GetLocalTime(&st);
return
0 <= order && order < SO_MAXSIZE ?
pst[order] : // 正常
-1; // 異常
/*
switch(order) {
case YE : return st.wYear;
case MO : return st.wMonth;
case WE : return st.wDayOfWeek;
case DA : return st.wDay;
case HO : return st.wHour;
case MI : return st.wMinute;
case SE : return st.wSecond;
case MS : return st.wMilliseconds;
default : return -1;
}
*/
}
}year, month, week, day, hour, minute, second, mseconds;
};
SYSTEMTIME Clock::st;
WORD *Clock::pst = (WORD*)&Clock::st;
int Clock::C_Order::s_order = Clock::C_Order::YE-1;
/*
int main() {
//Timer tim;
//cout << tim.GetHour();
Clock c;
cout << c.year << endl;
cout << c.month << endl;
cout << c.day << endl;
cout << c.week << endl;
cout << c.hour << endl;
cout << c.minute << endl;
cout << c.second << endl;
cout << c.mseconds << endl << endl;
Sleep(2100);
cout << c.second << endl;
cout << c.mseconds << endl << endl;
Sleep(2100);
cout << c.second << endl;
cout << c.mseconds << endl;
return 0;
}
*/