C++学習
30633 ワード
クラスの4つの合成とMyStringクラスの実現
コンポジットはデフォルトで、コンパイラによって自動的に生成され、暗黙的に呼び出されます.コンストラクション、レプリケーションコンストラクション、プロファイル、割り当てオペレータは、オブジェクトの初期化、レプリケーション、取り消し、割り当てをそれぞれ操作します.これらの概念を理解するには少し時間がかかりますが、理解するには絶えず実践しなければなりません.
1合成構造関数
構造関数の一般的な特性:コンストラクション関数の名前はクラスの名前と同じであり、戻りタイプ を指定することはできません.構造関数は再ロード可能であり、すなわち、パラメータテーブルは 多様であることができる.構造関数は変数を初期化するためのものであるため、const構造関数は実行不可能な である.コンストラクタの初期化リストは、宣言ではなくコンストラクタの定義でのみ を指定します.一部のデータ・メンバーは、コンストラクション関数初期化リストを使用して初期化する必要があります.定数メンバー、参照タイプメンバー、デフォルトのコンストラクション関数のないクラス・タイプ・メンバーです.なお、const以外の参照は、その参照と同じタイプのオブジェクトにのみバインドされ、const参照は、異なるが関連するタイプのオブジェクトにバインドされたり、右の値 にバインドされたりすることができる.データメンバーのコンストラクション関数の初期化リストでの初期化順序は、メンバーが宣言する順序で同じであるため、初期化クラステーブルでもこの順序で初期化すべきであり、1つのメンバーが他のメンバーに基づいて初期化されることを防止するが、次の順序が宣言の順序と同じではない場合、 が発生する.通常、暗黙的な変換を定義する理由が明らかでない限り、単一パラメトリック構造関数はexplicitに修飾されるべきであり、ユーザは表示された構造オブジェクトを通過する必要がある.explicitキーワードはクラス内部の構造関数宣言上の にのみ使用できることに注意する.
合成構造関数:コンパイラは、クラスがコンストラクション関数(レプリケーションコンストラクション関数を含む)を定義していない場合にのみ、デフォルトのコンストラクション関数 を自動的に生成する.他のコンストラクション関数が定義されている場合、非パラメトリックコンストラクション関数(デフォルトコンストラクション関数)を定義するのは常に安全である が表示されます.
2合成されたレプリケーション構造関数
構造関数の一般的な特性:同じタイプの別のオブジェクトを明示的または暗黙的に初期化すると、複製コンストラクタ が呼び出される.オブジェクトを実パラメータとして関数(非参照タイプまたは非ポインタタイプ)に渡すと、レプリケーションコンストラクタ が呼び出されます.関数がオブジェクトを返すと、レプリケーションコンストラクタ が呼び出されます.シーケンスコンテナ内の要素を初期化すると、レプリケーションコンストラクタ が呼び出される.要素初期化クラステーブルに基づいて配列要素を初期化すると、レプリケーションコンストラクタ が呼び出される. IOタイプのオブジェクトはコピーできないため、プライベートコピーコンストラクタ のようなコピー初期化を防止する必要がある. privateレプリケーション構造関数を宣言(定義しない)することによって、友元の関数およびメンバー関数 を含むクラスタイプオブジェクトのレプリケーションの試みを禁止することができる.
ジルコニウム合成のレプリケーション構造関数:レプリケーションコンストラクタを合成する動作は、新しいオブジェクトを元のオブジェクトのコピーに初期化し、メンバーがクラスタイプの場合、そのクラスのレプリケーションコンストラクタを使用してレプリケーションするメンバーごとの初期化(staticメンバー以外)を実行することである.特殊な場合、配列メンバーもコピーできます. メンバーがポインタタイプのメンバーを含む場合、またはメンバーがコンストラクション関数に割り当てられた他のリソースを表す場合、定義レプリケーションコンストラクション関数を再表示する必要があります.初期化は元のオブジェクトのコピーのみをコピーするため、ポインタもコピーのみである.すなわち、元のオブジェクトと新しいオブジェクトのポインタメンバーが同じメモリを指し、あるオブジェクトがメモリを解放した後、別のオブジェクトを解放すると、再解放エラー が発生する.レプリケーションコンストラクタが定義されていない場合、コンパイラは他のコンストラクタ(非レプリケーションコンストラクタ)を定義してもレプリケーションコンストラクタ を合成します.
3合成構造関数はパラメータを持たず、コンストラクション関数と同様に戻り値がないため、コンストラクション関数は再ロードできない である.解析関数をカスタマイズしても、コンパイラは常に解析関数を合成してくれます.また、解析関数をカスタマイズすると、コンパイラは実行時にカスタム解析関数(スタック上のメモリを手動で解放)を呼び出してから、合成した解析関数(スタック上のメモリを解放しません) を呼び出します.構造関数オブジェクト作成時の逆順で各非staticメンバー(スタック上のメンバー) を取り消す.構造関数は、ポインタメンバーが指すオブジェクトを削除しないため、メモリ を手動で解放する必要がある.
4合成割付オペレータ
割り当てオペレータの一般的なプロパティ:クラスが独自の付与オペレータを定義していない場合、同様にコンパイラも を合成します.は、定義付与オペレータを表示する、再ロード付与オペレータ である.ほとんどのオペレータはメンバー関数または非メンバー関数として定義できます.オペレータがメンバー関数である場合、その最初のオペランドはthisポインタに暗黙的にバインドされます.割り当てオペレータもそうですが、割り当てオペレータは自分のクラスのメンバーを定義する必要があります.割り当て値はクラスのメンバーでなければなりません.たとえば、自分のStringクラスを定義します. 5関連概念の理解
C++には、1つのパラメータのコンストラクション関数(または、最初のパラメータを除く残りのパラメータにデフォルト値のマルチパラメトリックコンストラクション関数)のみがあり、2つの役割を果たします.1はコンストラクタ、2はデフォルトで隠されたタイプ変換オペレータです.したがって、MyClass object=typeのようなコードを書く場合があり、typeのタイプはMyClass単一パラメータコンストラクタのパラメータタイプであり、コンパイラは自動的にこのコンストラクタを呼び出し、MyClassタイプのオブジェクトを作成します.
ヒープ領域(heap)は、一般的にプログラマによって割り当てられて解放され、プログラマが解放されなければ、プログラム終了時にOSによって回収される可能性がある.データ構造のスタックとは異なることに注意してください.割り当て方法はチェーンテーブルに似ています.
スタック領域(stack)、コンパイラによって自動的に割り当てられて解放され、関数のパラメータ値、ローカル変数の値などが格納されます.その動作は、データ構造内のスタックに似ています.
6例-MyStringクラスの実装
の下のMyString類の実現は上の概念をよく実践し,実験を通じて上の理論知識を比較的よく理解することができる.
クラスの4つの合成とMyStringクラスの実現
コンポジットはデフォルトで、コンパイラによって自動的に生成され、暗黙的に呼び出されます.コンストラクション、レプリケーションコンストラクション、プロファイル、割り当てオペレータは、オブジェクトの初期化、レプリケーション、取り消し、割り当てをそれぞれ操作します.これらの概念を理解するには少し時間がかかりますが、理解するには絶えず実践しなければなりません.
1合成構造関数
構造関数の一般的な特性:
合成構造関数:
2合成されたレプリケーション構造関数
構造関数の一般的な特性:
ジルコニウム合成のレプリケーション構造関数:
3合成構造関数
4合成割付オペレータ
割り当てオペレータの一般的なプロパティ:
explicit
C++には、1つのパラメータのコンストラクション関数(または、最初のパラメータを除く残りのパラメータにデフォルト値のマルチパラメトリックコンストラクション関数)のみがあり、2つの役割を果たします.1はコンストラクタ、2はデフォルトで隠されたタイプ変換オペレータです.したがって、MyClass object=typeのようなコードを書く場合があり、typeのタイプはMyClass単一パラメータコンストラクタのパラメータタイプであり、コンパイラは自動的にこのコンストラクタを呼び出し、MyClassタイプのオブジェクトを作成します.
heap
ヒープ領域(heap)は、一般的にプログラマによって割り当てられて解放され、プログラマが解放されなければ、プログラム終了時にOSによって回収される可能性がある.データ構造のスタックとは異なることに注意してください.割り当て方法はチェーンテーブルに似ています.
stack
スタック領域(stack)、コンパイラによって自動的に割り当てられて解放され、関数のパラメータ値、ローカル変数の値などが格納されます.その動作は、データ構造内のスタックに似ています.
6例-MyStringクラスの実装
の下のMyString類の実現は上の概念をよく実践し,実験を通じて上の理論知識を比較的よく理解することができる.
【MyString.h】
<code class="language-c++ hljs cs has-numbering"><span class="hljs-preprocessor">#<span class="hljs-keyword">pragma</span> once</span>
<span class="hljs-preprocessor">#<span class="hljs-keyword">define</span> _CRT_SECURE_NO_WARNINGS</span>
<span class="hljs-preprocessor">#include <iostream></span>
<span class="hljs-keyword">using</span> namespace std;
class MyString
{
friend ostream& <span class="hljs-keyword">operator</span><<(ostream& os,<span class="hljs-keyword">const</span> MyString &);
friend MyString <span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>*, <span class="hljs-keyword">const</span> MyString&);
<span class="hljs-keyword">public</span>:
<span class="hljs-title">MyString</span>(<span class="hljs-keyword">void</span>);
MyString(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *);
MyString(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *, <span class="hljs-keyword">int</span>);
MyString(<span class="hljs-keyword">const</span> MyString&);
~MyString(<span class="hljs-keyword">void</span>);
<span class="hljs-keyword">public</span>:
MyString& <span class="hljs-keyword">operator</span>=(<span class="hljs-keyword">const</span> MyString &);
MyString& <span class="hljs-keyword">operator</span>=(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *);
<span class="hljs-keyword">char</span>& <span class="hljs-keyword">operator</span>[](<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span>);
<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>& <span class="hljs-keyword">operator</span>[](<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span>)<span class="hljs-keyword">const</span>;
MyString <span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> MyString&);
MyString <span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> MyString&) <span class="hljs-keyword">const</span>;
MyString <span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>*);
<span class="hljs-keyword">public</span>:
<span class="hljs-keyword">int</span> <span class="hljs-title">size</span>();
<span class="hljs-keyword">private</span>:
<span class="hljs-keyword">int</span> m_len;
<span class="hljs-keyword">char</span> * m_str;
};</code><ul class="pre-numbering" style="display: block;"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li></ul>
【MyString.cpp】
<code class="language-c++ hljs cpp has-numbering"><span class="hljs-preprocessor">#include "MyString.h"</span>
<span class="hljs-preprocessor">#include <string.h></span>
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">//MyString 、 、 </span>
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">// </span>
MyString::MyString(<span class="hljs-keyword">void</span>)
{
<span class="hljs-comment">// 0</span>
m_len = <span class="hljs-number">0</span>;
<span class="hljs-comment">// m_str 0, (heap) , , </span>
<span class="hljs-comment">// ( ), , 1 , , </span>
<span class="hljs-comment">//m_str = new char(); </span>
<span class="hljs-comment">// 0 ,new , </span>
m_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[<span class="hljs-number">0</span>];
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"MyString(void)"</span> << endl;
}
<span class="hljs-comment">// const char* str </span>
MyString::MyString(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> * str)
{
m_len = <span class="hljs-built_in">strlen</span>(str);
m_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[m_len+<span class="hljs-number">1</span>];
<span class="hljs-built_in">memset</span>(m_str,<span class="hljs-number">0</span>,m_len+<span class="hljs-number">1</span>);
<span class="hljs-built_in">strncpy</span>(m_str,str,m_len);
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"MyString(const char * str)"</span> << endl;
}
<span class="hljs-comment">// </span>
MyString::MyString(<span class="hljs-keyword">const</span> MyString& mystring)
{
m_len = mystring.m_len;
m_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[m_len+<span class="hljs-number">1</span>];
<span class="hljs-built_in">memset</span>(m_str,<span class="hljs-number">0</span>,m_len+<span class="hljs-number">1</span>);
<span class="hljs-built_in">strncpy</span>(m_str,mystring.m_str,mystring.m_len);
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"MyString(const MyString& mystring)"</span> << endl;
}
<span class="hljs-comment">// len=sizeof("xxx");</span>
<span class="hljs-comment">// len = strlen(xxx)+1;</span>
MyString::MyString(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> * str,<span class="hljs-keyword">int</span> len)
{
m_len = len;
m_str = (<span class="hljs-keyword">char</span> *)<span class="hljs-built_in">malloc</span>(m_len+<span class="hljs-number">1</span>);
<span class="hljs-built_in">memset</span>(m_str,<span class="hljs-number">0</span>,m_len+<span class="hljs-number">1</span>);
<span class="hljs-built_in">strncpy</span>(m_str,str,m_len);
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"MyString(const char * str,int len)"</span> <<endl;
}
<span class="hljs-comment">// </span>
MyString::~MyString(<span class="hljs-keyword">void</span>)
{
<span class="hljs-comment">// ?</span>
<span class="hljs-keyword">delete</span> [] m_str;
<span class="hljs-comment">//delete m_str;</span>
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"~MyString(void)"</span> <<endl;
}
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">// </span>
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">// </span>
ostream& <span class="hljs-keyword">operator</span><<(ostream& os,<span class="hljs-keyword">const</span> MyString &mystring)
{
os << mystring.m_str;
<span class="hljs-keyword">return</span> os;
}
MyString <span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>* cstr, <span class="hljs-keyword">const</span> MyString& str) {
MyString ms1 = cstr;
MyString ms2 = str + ms1;
<span class="hljs-keyword">return</span> ms2;
}
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">// </span>
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">// : , , , </span>
MyString& MyString::<span class="hljs-keyword">operator</span>=(<span class="hljs-keyword">const</span> MyString & mystring)
{
<span class="hljs-keyword">if</span> (&mystring == <span class="hljs-keyword">this</span>)
{
<span class="hljs-built_in">cout</span> << <span class="hljs-string">" "</span> << endl;
<span class="hljs-keyword">return</span> *<span class="hljs-keyword">this</span>;
}
<span class="hljs-keyword">delete</span> [] m_str;
m_len = mystring.m_len;
m_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[m_len+<span class="hljs-number">1</span>];
<span class="hljs-built_in">memset</span>(m_str,<span class="hljs-number">0</span>,m_len+<span class="hljs-number">1</span>);
<span class="hljs-built_in">strncpy</span>(m_str,mystring.m_str,mystring.m_len);
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"operator=(const MyString & mystring)"</span> <<endl;
<span class="hljs-keyword">return</span> *<span class="hljs-keyword">this</span>;
}
MyString& MyString::<span class="hljs-keyword">operator</span>=(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span> *str)
{
<span class="hljs-keyword">delete</span> [] m_str;
m_len = <span class="hljs-built_in">strlen</span>(str);
m_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[m_len+<span class="hljs-number">1</span>];
<span class="hljs-built_in">memset</span>(m_str,<span class="hljs-number">0</span>,m_len+<span class="hljs-number">1</span>);
<span class="hljs-built_in">strncpy</span>(m_str,str,m_len);
<span class="hljs-built_in">cout</span> << <span class="hljs-string">"operator=(const char *str)"</span> <<endl;
<span class="hljs-keyword">return</span> *<span class="hljs-keyword">this</span>;
}
<span class="hljs-keyword">char</span>& MyString::<span class="hljs-keyword">operator</span>[](<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span> index)
{
<span class="hljs-keyword">if</span>(index >= m_len && index < <span class="hljs-number">0</span>){
<span class="hljs-built_in">cout</span> << <span class="hljs-string">" "</span> << endl;
<span class="hljs-built_in">exit</span>(-<span class="hljs-number">1</span>);
}
<span class="hljs-keyword">return</span> m_str[index];
}
<span class="hljs-comment">//const char& MyString::operator[](const int index) const;</span>
<span class="hljs-comment">//char& MyString::operator[](const int index) const;</span>
<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>& MyString::<span class="hljs-keyword">operator</span>[](<span class="hljs-keyword">const</span> <span class="hljs-keyword">int</span> index) <span class="hljs-keyword">const</span>
{
<span class="hljs-keyword">if</span>(index >= m_len && index < <span class="hljs-number">0</span>){
<span class="hljs-built_in">cout</span> << <span class="hljs-string">" "</span> << endl;
<span class="hljs-built_in">exit</span>(-<span class="hljs-number">1</span>);
}
<span class="hljs-keyword">return</span> m_str[index];
}
<span class="hljs-comment">//+ </span>
MyString MyString::<span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> <span class="hljs-keyword">char</span>* cstr) {
<span class="hljs-keyword">char</span>* new_str;
<span class="hljs-keyword">int</span> new_size = <span class="hljs-built_in">strlen</span>(cstr) + m_len + <span class="hljs-number">1</span>;
new_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[new_size];
<span class="hljs-built_in">memset</span>(new_str,<span class="hljs-number">0</span>,new_size);
<span class="hljs-built_in">strcpy</span>(new_str, m_str);
<span class="hljs-built_in">strcat</span>(new_str, cstr);
MyString ms = new_str;
<span class="hljs-keyword">delete</span> new_str;
<span class="hljs-keyword">return</span> ms;
}
MyString MyString::<span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> MyString& str) <span class="hljs-keyword">const</span> {
<span class="hljs-keyword">char</span>* temp_str;
<span class="hljs-keyword">int</span> temp_size = <span class="hljs-built_in">strlen</span>(str.m_str) + m_len + <span class="hljs-number">1</span>;
temp_str = <span class="hljs-keyword">new</span> <span class="hljs-keyword">char</span>[temp_size];
<span class="hljs-built_in">memset</span>(temp_str,<span class="hljs-number">0</span>,temp_size);
<span class="hljs-built_in">strcpy</span>(temp_str, m_str);
<span class="hljs-built_in">strcat</span>(temp_str, str.m_str);
MyString ms = temp_str;
<span class="hljs-keyword">delete</span> temp_str;
<span class="hljs-keyword">return</span> ms;
}
MyString MyString::<span class="hljs-keyword">operator</span>+(<span class="hljs-keyword">const</span> MyString& str) {
<span class="hljs-keyword">return</span> (*<span class="hljs-keyword">this</span> + str.m_str);
}
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">//MyString , </span>
<span class="hljs-comment">//--------------------------------------------------------------</span>
<span class="hljs-comment">// mystring </span>
<span class="hljs-keyword">int</span> MyString::size()
{
<span class="hljs-keyword">return</span> m_len;
}</code><ul class="pre-numbering" style="display: block;"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li><li>107</li><li>108</li><li>109</li><li>110</li><li>111</li><li>112</li><li>113</li><li>114</li><li>115</li><li>116</li><li>117</li><li>118</li><li>119</li><li>120</li><li>121</li><li>122</li><li>123</li><li>124</li><li>125</li><li>126</li><li>127</li><li>128</li><li>129</li><li>130</li><li>131</li><li>132</li><li>133</li><li>134</li><li>135</li><li>136</li><li>137</li><li>138</li><li>139</li><li>140</li><li>141</li><li>142</li><li>143</li><li>144</li><li>145</li><li>146</li><li>147</li><li>148</li><li>149</li><li>150</li><li>151</li><li>152</li><li>153</li><li>154</li><li>155</li><li>156</li><li>157</li><li>158</li><li>159</li><li>160</li><li>161</li><li>162</li><li>163</li><li>164</li><li>165</li><li>166</li><li>167</li><li>168</li><li>169</li><li>170</li></ul>
【main.cpp】
<code class="language-c++ hljs coffeescript has-numbering"><span class="hljs-comment">#include "MyString.h"</span>
int main(int argc,char *argv[])
{
<span class="hljs-regexp">/* */</span>
MyString str0;
<span class="hljs-regexp">/* const char* */</span>
char * cstr0 = <span class="hljs-string">"hello world"</span>;
char cstr1[] = <span class="hljs-string">"hello world"</span>;
MyString str1 = <span class="hljs-string">"hello world"</span>; <span class="hljs-regexp">//</span>C++ Primer ( )
MyString str2(<span class="hljs-string">"hello world"</span>);
MyString str3(cstr0);
MyString str4(cstr1);
MyString str5 = cstr0;
MyString str6 = cstr1;
/* , <span class="hljs-reserved">const</span> char * , <span class="hljs-reserved">const</span> char* , <span class="hljs-string">"world"</span>MyString
<span class="hljs-reserved">const</span> MyString &
*/
MyString str7 = <span class="hljs-string">"hello"</span>;
str7 = <span class="hljs-string">"world"</span>;
<span class="hljs-regexp">/* , const MyString & */</span>
MyString str8 = <span class="hljs-string">"hello"</span>;
MyString str9 = <span class="hljs-string">"world"</span>;
str8 = str9;
/* char& <span class="hljs-attribute">MyString</span>::operator[](<span class="hljs-reserved">const</span> int index)<span class="hljs-reserved">const</span>;, <span class="hljs-reserved">const</span> MyString
<span class="hljs-reserved">const</span> MyString , <span class="hljs-reserved">const</span> char& <span class="hljs-attribute">MyString</span>::operator[](<span class="hljs-reserved">const</span> int index)<span class="hljs-reserved">const</span>;*/
<span class="hljs-reserved">const</span> MyString str10 = <span class="hljs-string">"hello"</span>;
<span class="hljs-regexp">//</span> <span class="hljs-reserved">const</span> char& <span class="hljs-attribute">MyString</span>::operator[](<span class="hljs-reserved">const</span> int index)<span class="hljs-reserved">const</span>; <span class="hljs-reserved">const</span> , <span class="hljs-reserved">const</span> str10,
<span class="hljs-regexp">//</span>str10[<span class="hljs-number">0</span>] = <span class="hljs-string">'W'</span>;
<span class="hljs-regexp">//</span>ch = <span class="hljs-string">'e'</span>;
char ch = str10[<span class="hljs-number">1</span>];
<span class="hljs-regexp">//</span>+ <<
MyString str11 = <span class="hljs-string">"hello "</span>;
str11 = str11 + <span class="hljs-string">"world"</span>;
cout << str11 << endl;
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}</code>