varクラスと言うだけで、おそらくどんなクラスなのか想像がつくと思います。
そうです。javascriptのように数値と文字列をあまり考えずに扱うことができるクラスです。ただ、javascriptでは数値を指しているのか文字列を指しているのかが曖昧(特に連結時)という欠点があったので、そこはカバーしました。
使用例です。クリックしてご覧ください
► スポイラーを表示
#define _CRT_SECURE_NO_DEPRECATE
#include "var.h"
int main(){
var v = 2525;/////// 宣言。2525で初期化
printf(v.c_str() );//// 出力。 2525 と表示される
printf("\n");
v += "2525";//////// 数値部には2525が加算され、文字列部には2525という文字列が追加される
printf(v.c_str() );/// 文字列部を出力。 25252525 と表示される
printf("\n");
printf(v.numcc() );/// 数値部を出力。 5050.000000 と表示される
printf("\n");
int inum = 2525;
v -= inum;/////////// 数値計算として処理される。数値部から2525が引かれ、その結果が文字列部に記録される
printf(v.c_str() );/// 文字列部を出力。 2525 と表示される
printf("\n");
printf(v.numcc() );// 数値部を出力。 2525 と表示される
printf("\n");
char *cstr = "2";
v *= cstr;////////// 数値計算として処理される。数値部に2がかけられ、その結果が文字列部に記録される
printf(v.c_str() );// 出力。 5050.000000 と表示される
printf("\n");
string str = "5";
v /= str;///////////// 数値計算として処理される。数値部が2でわられ、その結果が文字列部に記録される
printf(v.c_str() );/// 出力。 1010.000000 と表示される
printf("\n");
var v2;
v2 = : 右辺が数値(又はvarオブジェクト)なら数値比較を行いbool値を返す。
右辺が文字列ならstring的処理が行われる。
: 同
using namespace std;
#ifndef _FTOS_
#define _FTOS_
string ftos(double num){
char media[33];
sprintf(media, "%f", num);
string str = media;
return str;
}
#endif
#ifndef _ITOS_
#define _ITOS_
string itos(int val, int radix = 10){
char recep[33];
string output = _itoa(val, recep, radix);
return output;
}
#endif
#ifndef _VAR_
#define _VAR_
class var :public string{
double mynum;
string outnum;
public:
char forc[101];
double num(){ return mynum; }
string & nums(){
outnum = ftos(mynum);
return outnum;
}
const char * numcc(){
outnum = ftos(mynum);
return outnum.c_str();
}
char * numc(){
strcpy(forc, ftos(mynum).c_str() );
return forc;
}
char * strc(){
strcpy(forc, c_str() );
return forc;
}
void reflect(){ set(forc); }
var & set(int rnum){
mynum = rnum;
assign(itos(rnum) );
return *this;
}
var & operator= (int rnum){ return set(rnum); }
var & set(double rnum){
mynum = rnum;
assign(ftos(rnum) );
return *this;
}
var & operator= (double rnum){ return set(rnum); }
var & set(string &str){
mynum = atof(str.c_str() );
assign(str);
return *this;
}
var & operator= (string &str){ return set(str); }
var & set(const char *str){
mynum = atof(str);
assign(str);
return *this;
}
var & operator= (const char *str){ return set(str); }
var & set(var &media){
mynum = media.num();
assign(media);
return *this;
}
var & add(int rnum){
mynum += rnum;
append(itos(rnum) );
return *this;
}
var & operator+= (int rnum){ return add(rnum); }
var & operator= (double rnum){
if(mynum>=rnum) return true;
return false;
}
bool operator>= (var &media){
if(mynum>=media.num() ) return true;
return false;
}
bool operator (double rnum){
if(mynum>rnum) return true;
return false;
}
bool operator> (var &media){
if(mynum>media.num() ) return true;
return false;
}
bool operator< (double rnum){
if(mynum<rnum) return true;
return false;
}
bool operator< (var &media){
if(mynum<media.num() ) return true;
return false;
}
var(){ mynum=0; }
var(int rnum){ *this = rnum; }
var(double rnum){ *this = rnum; }
var(string &str){ *this = str; }
var(const char *str){ *this = str; }
var(var &media){ *this = media; }
~var(){}
};
#endif
最後に
このクラスは関数の引数の型として使用された際に最大の効果を発揮すると思います。
その関数を利用する際に渡す変数が数値か文字列かを気にする必要がないからです。
あとは、コンストではないchar*型ポインタを渡せることですかね。これは大きいと思います。
これでプログラミング速度がそれなりに上がるのではないかと思います。
それでは良いプログラミングライフを。