掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
BCBのAnsiStringクラスの拡張 (ID:15962)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
AnsiStringクラスの拡張 どちらかというと(pascalでなく)C++の初歩的なことかもしれませんが、質問させていただきます。もし、知っている方がいたら、ご教授ください。 AnsiStringは非常に便利ですが、添え字カウントが1から始まるのがややこしく、また、自分自身が慣れていることを理由に、STLのstringを多用しています。 AnsiStringとstringが混在しても、c_str()をつかって相互に変換すれば問題ありません。でも、コードが増えて行くにつれ、めんどくさいと思い始めました。 たとえば、 AnsiString as; string s; のとき as = as + s.c_str(); とかきますが、一般関数を用いた演算子多重定義を使って自動化させることができました。つまり AnsiString operator+(AnsiString& a , string& b ) { return (a + AnsiString(b.c_str())); } を定義してやれば、 as = as + s; と記述することが可能になります。 今回悩んでいるのは、、 string s; Edit1->Text = s.c_str(); を、なんとかできないかです。 たとえば、AnsiStringメンバ関数による演算子多重定義を使って、 AnsiString AnsiString::operator=( string s ) { return AnsiString( s.c_str() ); } などを定義できれば、 Edit1->Text = s; でいいわけです。しかし、AnsiStringクラスの宣言のヘッダには AnsiString AnsiString::operator=( string s ); の宣言がないわけで、オリジナルのヘッダ自体を書き換えなくてはいけません。クラスの付け足し宣言とかって、できないですよねぇ。 前述のように一般関数を用いた演算子多重定義が、operator=でできないか試してみましたが、operator=はメンバ関数でないとだめというエラーがでます。 教科書てきには、クラスのメンバ関数を拡張したいなら、AnsiStringを全て継承し、operator=も加えた、新しいAnsiStringクラスでも作れ、ということでしょうが、VCLのプロパティの多くがAnsiStringなので、最終的にAnsiStringにしなくてはいけないので、意味がありませんし・・・・ もしかして、なにか初歩的な勘違いとかしてるのでしょうか? 別の方法でも、なにか、いい方法があるでしょうか?
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.