Pythonにおける演算子オーバーロードの実装方法

演算子オーバーロードの基本概念 単項演算子のオーバーロード 単項演算子では、オブジェクトに対する正符号(+)と負符号(-)の動作を定義します。 import math from array import array class Vector: def __init__(self, elements): self._elements = array('d', elements) def __neg__(self): """負符号(-)演算子のオーバーロード""" ...

7月29日 18:28 投稿

C++における演算子オーバーロードと日付クラスの実装

演算子のカスタム定義 ユーザー定義型に対して、演算子の動作を再定義する機能がC++には備わっています。たとえば、日付比較のために==をオーバーロードできます。 class Calendar { public: Calendar(int y, int m, int d) : year(y), month(m), day(d) {} bool isEqual(const Calendar& other) const { return year == other.year && month == other.mo ...

7月27日 20:09 投稿

Pythonの特殊メソッド実装パターン

Pythonの特殊メソッド(ダンダーメソッド)は、言語機能とオブジェクトの相互作用を可能にするコアメカニズムです。これらのメソッドは__で始まり__で終わる名前を持ち、演算子のオーバーロードや組み込み関数の動作をカスタマイズします。 基本的な特殊メソッド実装例 オブジェクト初期化 <code>class ユーザー: def __init__(self, 名前, 年齢): sel ...

7月10日 17:43 投稿

C++ 面接問題集:ポインタ、配列、const の基礎

1. for ループと while ループの変換 for 文は while 文に書き換え可能である。同様に do-while 文でも実現できる。条件判定のタイミングが異なるが、制御構造の本質は同じである。C++ ではループ制御の書き換えが容易であり、可読性向上のために適宜選択する。 2. 二次元配列の文字列出力 #include <cstring> #include <cstdio> int main() { char data ...

6月12日 18:56 投稿

Rustのジェネリック型パラメータのデフォルト型と演算子オーバーロード

一、序論 ジェネリック型にデフォルト型を設定する機能は、多くの言語には存在しませんが、TypeScript(おそらく他にもいくつか)には例外があります。 TypeScriptでは以下のように使用できます: class MyClass<T = number> { value: T; constructor(value: T) { this.value = value; } printValue(): void { console.log(`Value i ...

5月28日 19:06 投稿

PyTorch自動微分のリバースモード実装

基礎理論 演算子オーバーロード(OO)とリバースモード自動微分の概念を組み合わせた実装手法について解説する。Pythonを用いてPyTorchのコアメカニズムを再現する。 演算子オーバーロード手法 現代プログラミング言語の多態性を利用し、基本演算子の微分規則をカプセル化する。演算子の再定義により計算グラフを構築し、連鎖律で微分結果を合成する。 利点 実装 ...

5月16日 09:26 投稿

C++での日付クラスの実装(メモ)

これまでにC++のクラスとオブジェクトの基本を学び、日付クラスの一部を例として使用しました。この記事では、小さな日付クラスを実装します。 まず、VSで3つのファイルを作成します: Test.cpp:日付クラスのテスト用ファイル 日常生活では、日付に対して整数日を加算または減算できます。例えば、2004年2月1日に3日を加えると、2004年2月4日になります。同様に減算も可能 ...

5月16日 03:19 投稿

C++クラスとオブジェクトの基本

1. クラスとオブジェクト 1.1 クラスの定義 C++では、classキーワードを使ってクラスを定義する。以下はスタックを表すクラスの例である: #include <iostream> using namespace std; class Stack { private: int* _data; int _index; int _maxSize; public: void push() {} void pop() {} }; // セミコロンが必要 メンバー変数には慣習的に ...

5月15日 14:21 投稿