発端
こちらのお嬢様がとても楽しそうなことをしてらしたの
わたくしもご一緒したいですわ
https://twitter.com/yaito3014/status/1539110456753025025
背景
a + b
やa * b * c
を口に出しますと、「aとbの和」や「aとbとcの積」になるのが普通ですわ
ですので、最後の数を書いた後から四則を選べたなら、わたくしとても便利だと思っておりますの
執事に調べてもらったところ、計算式には日本語語順ライブラリがないようですので、
わたくしが1番ですわね(もしあったのでしたら申し訳ありませんわ)
関数で作るのはみなさまにお任せして、わたくしは演算子のオーバーロードで作りますわ
普段C++は使っておりませんので、ご容赦くださいまし
コード
#define 和 1
#define 差 2
#define 積 3
#define 商 4
int mode = 0;
class KusoClass {
private:
double value;
public:
KusoClass operator |(const auto n) const {
// <<=より強い、2項間演算子
// mode変更
mode = n;
return *this;
}
KusoClass operator <<=(const KusoClass right) const {
// |より弱い、>>と同じか強い、右から左、2項間演算子
// modeによる四則演算
KusoClass tmp;
switch (mode){
case 和:
tmp.set(this->value + right.get());
break;
case 差:
tmp.set(this->value - right.get());
break;
case 積:
tmp.set(this->value * right.get());
break;
case 商:
tmp.set(this->value / right.get());
break;
default:
tmp.set(this->value);
}
return tmp;
}
KusoClass operator ,(KusoClass * const right) const {
// <<=と同じか弱い、左から右、2項間演算子
// 左辺を右辺に代入
right->set(this->value);
return *this;
}
KusoClass(double x = 0) {this->value = x;}
double get() const {return this->value;}
void set(const double x) {this->value = x;}
};
#include "Kuso.h"
#include <iostream>
/*
#define 様
#define に
#define を
#define 収めます
#define です
#define こちらは KusoClass
#define は .set(
#define ですの );
#define と <<=
#define の |
#define 合計 和
#define ひとまず , &
#define わ ;
#define こちらの auto
#define へ =
#define の結果 .get()
#define 画面に std::cout <<
#define をお見せします << std::endl
#define 数字の KusoClass)(
*/
int main(void){
KusoClass x(2), y(3), z(4), a;
x <<= y <<= z | 和, &a;
std::cout << a.get() << std::endl;
/*
こちらは xx 様 です わ xx 様 は 2 ですの
こちらは yy 様 です わ yy 様 は 3 ですの
こちらは zz 様 です わ zz 様 は 4 ですの
こちらは aa 様 です わ
xx 様 と yy 様 と zz 様 の 合計 を ひとまず aa 様 に 収めます わ
画面に aa 様 の結果 をお見せします わ
*/
auto b = (x <<= y <<= z | 和).get();
std::cout << b << std::endl;
/*
こちらの bb 様 へ (xx 様 と yy 様 と zz 様 の 合計)の結果 を 収めます わ
画面に bb 様 をお見せします わ
*/
std::cout << (KusoClass(2) <<= KusoClass(3) | 和).get() << std::endl;
/*
画面に((数字の 2)と(数字の 3)の 合計)の結果 をお見せします わ
*/
return 0;
}
一度貼り付けたら、山ほど赤線が出ましたの。致し方ありませんわね
日本語文はコメントアウトしておきますわ
数式を右から計算しておりますわ。ですので、差と商は2値でしか使えませんわ
それと、日本語文の括弧は目をつぶってくださいましね
感想
オーバーロードを使ったのは、わたくしこれが初めてですの
C++はとても自由ですのね。わたくし気に入りましたわ
それと、「様」にコードを割り当てられませんでしたわ
プログラミングに敬称は要らないと言われているようで、少し哀しくなりましたわ
追記
「C++にはGCがありませんので、一時オブジェクトをnewで生成するのはお控えくださいませ」とのお声をいただきましたの
ご指摘大変感謝いたしますわ。次回作はdelete忘れに目をかけて投稿いたしますわ
ご指南いただけることで、わたくしの視点を増やす良き機会になりましたわ
定期的に異言語交流するのはよいものですわね