LoginSignup
4
2

More than 1 year has passed since last update.

C++お嬢様が足し算の語順を変えましたわ~

Last updated at Posted at 2022-06-25

発端

こちらのお嬢様がとても楽しそうなことをしてらしたの
わたくしもご一緒したいですわ
https://twitter.com/yaito3014/status/1539110456753025025

背景

a + ba * b * cを口に出しますと、「aとbの和」や「aとbとcの積」になるのが普通ですわ

ですので、最後の数を書いた後から四則を選べたなら、わたくしとても便利だと思っておりますの
執事に調べてもらったところ、計算式には日本語語順ライブラリがないようですので、
わたくしが1番ですわね(もしあったのでしたら申し訳ありませんわ)

関数で作るのはみなさまにお任せして、わたくしは演算子のオーバーロードで作りますわ
普段C++は使っておりませんので、ご容赦くださいまし

コード

Kuso.h
#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;}
};
Main.cpp
#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忘れに目をかけて投稿いたしますわ

ご指南いただけることで、わたくしの視点を増やす良き機会になりましたわ
定期的に異言語交流するのはよいものですわね

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2