C++でクラス型を別のクラス型に変換する方法をわかりやすく解説
はじめに
本記事では、C++において、あるクラス型を別のクラス型へ変換する方法について詳しく解説します。
クラス型同士の変換は、演算子オーバーロード(operator overloading)を活用することで実現できます。これにより、あるクラス型のデータを、別のクラス型のオブジェクトに代入できるようになります。
クラス型変換の基本的な仕組み
変換を実現するには、代入演算子「=」をオーバーロードします。具体的には、変換先のクラス側で operator= を定義し、引数として変換元のクラス型のオブジェクトを受け取ります。この演算子関数の中で、変換元オブジェクトから必要なデータを取得し、変換先クラスのメンバ変数に格納することで、型変換が完了します。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
//type to which it will be converted
class Class_type_one {
string a = "TutorialsPoint";
public:
string get_string(){
return (a);
}
void display(){
cout << a << endl;
}
};
//class to be converted
class Class_type_two {
string b;
public:
void operator=(Class_type_one a){
b = a.get_string();
}
void display(){
cout << b << endl;
}
};
int main(){
//type one
Class_type_one a;
//type two
Class_type_two b;
//type conversion
b = a;
a.display();
b.display();
return 0;
}
実行結果
TutorialsPoint TutorialsPoint
コードのポイント解説
- Class_type_one(変換元クラス):文字列メンバ
aを持ち、get_string()関数を通じてその値を外部に提供します。 - Class_type_two(変換先クラス):ここで
operator=をオーバーロードし、Class_type_one型のオブジェクトを引数として受け取ります。 - 型変換の実行:
b = a;という代入文が実行されると、オーバーロードされたoperator=が呼び出され、Class_type_oneの文字列データがClass_type_twoのメンバbにコピーされます。
このように演算子オーバーロードを利用することで、異なるクラス型の間でも、組み込み型と同じように自然な代入操作(型変換)を実現できます。実行結果を見ると、両方のオブジェクトが同じ文字列「TutorialsPoint」を表示しており、変換が正しく行われたことが確認できます。
-
C++でオブジェクト指向プログラミングを始めるには?基本概念をわかりやすく解説
オブジェクト指向プログラミング(Object-Oriented Programming、OOP)は、「オブジェクト」という概念を土台としたプログラミング手法(パラダイム)です。オブジェクトは、属性(attribute)という形でデータを保持し、メソッド(method)という形で処理内容を備えています。 たとえば「人間」をオブジェクトとして捉えると、身長・性別・年齢といった属性を持ち、「移動する」「話す」などのメソッドを持つことになります。 オブジェクトとは オブジェクトは、オブジェクト指向プログラミングにおける基本単位です。データと、そのデータを操作する関数(処理)が、ひとつのまとまりとして束
-
C++で列挙型(enum)を定義する方法を初心者向けに解説
列挙型(enum)とは、任意の型名と、その型の値として使用できる0個以上の識別子の集合を宣言するための機能です。各列挙子(enumerator)は、その列挙型を持つ定数として扱われます。 enumが役立つ場面 enumは、変数が取りうる値の種類があらかじめ決まっている場合に特に便利です。たとえば、「性別」という情報を扱うアプリケーションを作成する場合を考えてみましょう。性別には「男性」「女性」「その他」の3種類があるとします。このようなケースでは、次のようにenumを定義して利用できます。 #include <iostream> using namespace std; enum