お世話になっております。
C++のクラスについて、クラスの変数を引数で渡した際の動作について、ご質問があります。
MFC(ATL?)には文字列を扱う為のクラス"CString"があります。
このクラスを、引数がconst char*型やLPCSTRなどの関数に渡しても正常に動作します。
例としては、printfやfputsやMessageBoxなど関数になります(ごく一部)
CString型の変数を渡しているのに、何故、型が異なる等のコンパイルエラーが発生しないのか、疑問に思いました。
CStringで内部的にはchar型で文字列の情報を保存しており、引数の場合にはchar型として
返すような仕様になっているのだとは予想しているですが、実際にはどういう技術を使用して、実装しているのでしょうか?
operatorの機能などで、引数の場合など書き方があるのかな?と思い、
「operator 引数」などで調べましたが、関係のありあそうな情報は見つかりませんでした。
(勝手なイメージ)
operator 引数の場合(){
return メンバ変数;
}
(そもそもoperatorは演算子のオーバーロードなので、絶対違いますよね…)
例として使用したソースは以下になります。
C++
1#include <stdio.h> 2#include <string.h> 3#include <atlstr.h> // CString用 4 5class CTestStr 6{ 7public: 8 CTestStr(char* _str) 9 { 10 strcpy_s(str, sizeof(str), _str); 11 } 12 ~CTestStr(void){}; 13 14private: 15 char str[256]; 16 17}; 18 19int main(void) 20{ 21 CString str1 = "テスト1"; 22 CTestStr str2("テスト2"); 23 24 printf("%s\n", str1); // テスト1 表示される 25 //printf("%s\n", str2); // 上と同じように表示出来る??? 26 27 return 0; 28}
テストのコードなので、超適当ですがご容赦お願いします。
CStringと同じ方法を使用すれば、CTestStrクラスでも同じようにprintfで文字列を表示等が出来るんだと思います。
文字列以外でも色々と応用できると思うので、CStringがどうやってこの仕組みを実装しているのか、ご教授いただけないでしょうか?
御手数をお掛け致しますが、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/28 00:13