<p>Due to the school curriculum, as an electric dog, it is the first time to start doing Cpp .<br>Specially record some pits encountered in the process of building a database, →_→</p>
<h2id="About-h-files"><ahref="#About-h-files"class="headerlink"title="About .h files"></a>About .h files</h2><p>As a header file, there are generally declarations of corresponding classes and functions in .h.<br>A typical .h file is as follows: (FileName: yimian.h)</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br><spanclass="line">11</span><br><spanclass="line">12</span><br><spanclass="line">13</span><br><spanclass="line">14</span><br><spanclass="line">15</span><br><spanclass="line">16</span><br><spanclass="line">17</span><br><spanclass="line">18</span><br><spanclass="line">19</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">ifndef</span> YIMIAN_H <spanclass="comment">//Prevent this file from being compiled multiple times</span></span></span><br><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">define</span> YIMIAN_H <spanclass="comment">//The value of'YIMIAN_H' needs to be customized</span></span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="comment">//Lib may be used in.h</span></span><br><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string"><iostream></span></span></span><br><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string"><string></span></span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">using</span><spanclass="keyword">namespace</span><spanclass="built_in">std</span>; <spanclass="comment">//Use the std namespace, so you don’t need to write std::cout below</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="comment">//Declare the yimian class</span></span><br><spanclass="line"><spanclass="class"><spanclass="keyword">class</span><spanclass="title">yimian</span>{</span></span><br><spanclass="line"><spanclass="keyword">public</span>: <spanclass="comment">//Public domain (can be directly called by the outside world)</span></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">hi</span><spanclass="params">()</span></span>;</span><br><spanclass="line"><spanclass="keyword">static</span><spanclass="built_in">string</span> version;</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">private</span>: <spanclass="comment">//Private (not public)</span></span><br><spanclass="line">};</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">endif</span><spanclass="comment">//Correspond to the anti-multiple compilation at the beginning of the file</span></span></span><br></pre></td></tr></table></figure>
<p>For safety, the initialization of functions and variables is generally not carried out in the .h file. Instead, I am used to creating a new .cpp file with the same name.<br>The following is an example of a .cpp file corresponding to the morning: (FileName: yimian.cpp)</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string">"yimian.h"</span><spanclass="comment">//Need to point to yimian.h</span></span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="built_in">string</span> yimian::version = <spanclass="string">"Version 0.0.1"</span>; <spanclass="comment">//Assign a value to a string variable</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">yimian::hi</span><spanclass="params">()</span></span>{<spanclass="comment">//Define the content of the hi() function in the yimian class</span></span><br><spanclass="line"><spanclass="built_in">cout</span><<<spanclass="string">"Hellow Yimian~"</span><<<spanclass="built_in">endl</span>; <spanclass="comment">//Output "Hellow Yimian~\n" to the screen</span></span><br><spanclass="line">}</span><br></pre></td></tr></table></figure>
<p>With the above files, a simple C++ library is built φ( ̄∇ ̄o)<br>So we create a new test.cpp file to place main()</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br><spanclass="line">11</span><br><spanclass="line">12</span><br><spanclass="line">13</span><br><spanclass="line">14</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string"><iostream> //lib declaration to be used</span></span></span><br><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string"><stdio.h></span></span></span><br><spanclass="line"><spanclass="meta">#<spanclass="meta-keyword">include</span><spanclass="meta-string">"yimian.h"</span><spanclass="comment">//Introduce custom lib</span></span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">using</span><spanclass="keyword">namespace</span><spanclass="built_in">std</span>; <spanclass="comment">//Use std namespace</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">int</span><spanclass="title">main</span><spanclass="params">()</span></span>{</span><br><spanclass="line"> yimian $; <spanclass="comment">//Define a new yimian class named $</span></span><br><spanclass="line"></span><br><spanclass="line"> $.hi(); <spanclass="comment">//Call the hi() function in the yimian class</span></span><br><spanclass="line"><spanclass="built_in">cout</span><< $.version<<<spanclass="built_in">endl</span>; <spanclass="comment">//Output the yimian class version variable to the screen</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">return</span><spanclass="number">0</span>; <spanclass="comment">//End of main function</span></span><br><spanclass="line">}</span><br></pre></td></tr></table></figure>
<p>Then you can use g++ to compile happily, the instructions are as follows: (How to build a GNU environment in win)</p>
<figureclass="highlight plain"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br></pre></td><tdclass="code"><pre><spanclass="line">$ g++ test.cpp yimian.cpp -o [name of target file]</span><br></pre></td></tr></table></figure>
<p>Then start the compiled program from the command line (what is the command line ⌇●﹏●⌇)</p>
<p>As you might expect, the result of the above program is:</p>
<blockquote>
<p>Hellow Yimian~<br>Version 0.0.1</p>
</blockquote>
<hr>
<p><strong>Pit</strong> ::aru:meditation::</p>
<ul>
<li>The defined class declared in the header file must be instantiated (called) in main(), otherwise an error will be reported</li>
</ul>
<hr>
<h2id="Summarize-the-related-knowledge-of-the-class"><ahref="#Summarize-the-related-knowledge-of-the-class"class="headerlink"title="Summarize the related knowledge of the class"></a>Summarize the related knowledge of the class</h2><h3id="Class-access-modifier"><ahref="#Class-access-modifier"class="headerlink"title="Class access modifier"></a>Class access modifier</h3><ul>
<li><strong>public:</strong> Content accessible inside and outside the class</li>
<li><strong>private:</strong> not accessible outside the class, only accessible by yourself and friends, not accessible by subclasses</li>
<li><strong>protected:</strong> Inaccessible from outside, accessible by yourself, friends and subclasses</li>
</ul>
<h3id="Special-function-types"><ahref="#Special-function-types"class="headerlink"title="Special function types"></a>Special function types</h3><ul>
<li><p><strong>Constructor:</strong> It will be executed every time an object is created, that is, initialization</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="class"><spanclass="keyword">class</span><spanclass="title">Line</span>{</span></span><br><spanclass="line"><spanclass="keyword">public</span>:</span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">setLength</span><spanclass="params">( <spanclass="keyword">double</span> len )</span></span>;</span><br><spanclass="line"><spanclass="function"><spanclass="keyword">double</span><spanclass="title">getLength</span><spanclass="params">( <spanclass="keyword">void</span> )</span></span>;</span><br><spanclass="line"> Line(); <spanclass="comment">// This is the constructor</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">private</span>:</span><br><spanclass="line"><spanclass="keyword">double</span> length;</span><br><spanclass="line">};</span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>Destructor:</strong> The function executed when the object is deleted, that is, the aftermath</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="class"><spanclass="keyword">class</span><spanclass="title">Line</span>{</span></span><br><spanclass="line"><spanclass="keyword">public</span>:</span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">setLength</span><spanclass="params">( <spanclass="keyword">double</span> len )</span></span>;</span><br><spanclass="line"><spanclass="function"><spanclass="keyword">double</span><spanclass="title">getLength</span><spanclass="params">( <spanclass="keyword">void</span> )</span></span>;</span><br><spanclass="line"> Line(); <spanclass="comment">// This is the constructor declaration</span></span><br><spanclass="line"> ~Line(); <spanclass="comment">// This is the destructor declaration</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">private</span>:</span><br><spanclass="line"><spanclass="keyword">double</span> length;</span><br><spanclass="line">};</span><br></pre></td></tr></table></figure>
</li>
<li><p><strong>Copy constructor:</strong> Transfer parameters between objects of the same type when copying objects</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br><spanclass="line">11</span><br><spanclass="line">12</span><br><spanclass="line">13</span><br><spanclass="line">14</span><br><spanclass="line">15</span><br><spanclass="line">16</span><br><spanclass="line">17</span><br><spanclass="line">18</span><br><spanclass="line">19</span><br><spanclass="line">20</span><br><spanclass="line">21</span><br><spanclass="line">22</span><br><spanclass="line">23</span><br><spanclass="line">24</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="class"><spanclass="keyword">class</span><spanclass="title">Line</span>{</span></span><br><spanclass="line"><spanclass="keyword">public</span>:</span><br><spanclass="line"><spanclass="function"><spanclass="keyword">int</span><spanclass="title">getLength</span><spanclass="params">( <spanclass="keyword">void</span> )</span></span>;</span><br><spanclass="line"> Line( <spanclass="keyword">int</span> len ); <spanclass="comment">// simple constructor</span></span><br><spanclass="line"> Line( <spanclass="keyword">const</span> Line &obj); <spanclass="comment">// copy constructor</span></span><br><spanclass="line"> ~Line(); <spanclass="comment">// Destructor</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">private</span>:</span><br><spanclass="line"><spanclass="keyword">int</span> *ptr;</span><br><spanclass="line">};</span><br><spanclass="line">·········</span><br><spanclass="line">Line::Line(<spanclass="keyword">const</span> Line &obj){</span><br><spanclass="line"><spanclass="built_in">cout</span><<<spanclass="string">"Call the copy constructor and allocate memory for the pointer ptr"</span><<<spanclass="built_in">endl</span>;</span><br><spanclass="line"> ptr = <spanclass="keyword">new</span><spanclass="keyword">int</span>;</span><br><spanclass="line"> *ptr = *obj.ptr; <spanclass="comment">// copy value</span></span><br><spanclass="line">}</span><br><spanclass="line">·········</span><br><spanclass="line"><spanclass="function"><spanclass="keyword">int</span><spanclass="title">main</span><spanclass="params">( )</span></span>{</span><br><spanclass="line"><spanclass="function">Line <spanclass="title">line1</span><spanclass="params">(<spanclass="number">10</span>)</span></span>;</span><br><spanclass="line"></span><br><spanclass="line"> Line line2 = line1; <spanclass="comment">// The copy constructor is also called here</span></span><br><spanclass="line"></span><br><spanclass="line"><spanclass="keyword">return</span><spanclass="number">0</span>;</span><br><spanclass="line">}</span><br></pre></td></tr></table></figure>
</li>
<li><p>The difference between construction and copy construction:</p>
<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="function">A <spanclass="title">x</span><spanclass="params">(<spanclass="number">2</span>)</span></span>;<spanclass="comment">//Direct initialization, call the constructor</span></span><br><spanclass="line">A y = x;<spanclass="comment">//Copy initialization, call the copy constructor</span></span><br></pre></td></tr></table></figure>
<li><strong>Youyuan:</strong> Youyuan is like an old neighbor, you can take whatever you want at home<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br><spanclass="line">11</span><br><spanclass="line">12</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="class"><spanclass="keyword">class</span><spanclass="title">INTEGER</span>{</span></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">friend</span><spanclass="keyword">void</span><spanclass="title">Print</span><spanclass="params">(<spanclass="keyword">const</span> INTEGER& obj)</span></span>;<spanclass="comment">//Declare friend function</span></span><br><spanclass="line">};</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">Print</span><spanclass="params">(<spanclass="keyword">const</span> INTEGER& obj)</span></span>{</span><br><spanclass="line"><spanclass="comment">//Function body</span></span><br><spanclass="line">}</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">void</span><spanclass="title">main</span><spanclass="params">()</span></span>{</span><br><spanclass="line"> INTEGER obj;</span><br><spanclass="line"> Print(obj);<spanclass="comment">//Call directly</span></span><br><spanclass="line">}</span><br></pre></td></tr></table></figure>
<li>In short, the number of lines is small and the function is very simple. There are no loops and switch statements. If you want to improve the efficiency of the function, use inline (╯‵□′)╯︵┴─┴<figureclass="highlight c++"><table><tr><tdclass="gutter"><pre><spanclass="line">1</span><br><spanclass="line">2</span><br><spanclass="line">3</span><br><spanclass="line">4</span><br><spanclass="line">5</span><br><spanclass="line">6</span><br><spanclass="line">7</span><br><spanclass="line">8</span><br><spanclass="line">9</span><br><spanclass="line">10</span><br><spanclass="line">11</span><br></pre></td><tdclass="code"><pre><spanclass="line"><spanclass="function"><spanclass="keyword">inline</span><spanclass="keyword">int</span><spanclass="title">Max</span><spanclass="params">(<spanclass="keyword">int</span>x, <spanclass="keyword">int</span> y)</span></span>{</span><br><spanclass="line"><spanclass="keyword">return</span> (x> y)? x: y;</span><br><spanclass="line">}</span><br><spanclass="line"></span><br><spanclass="line"><spanclass="comment">// The main function of the program</span></span><br><spanclass="line"><spanclass="function"><spanclass="keyword">int</span><spanclass="title">main</span><spanclass="params">()</span></span>{</span><br><spanclass="line"><spanclass="built_in">cout</span><<<spanclass="string">"Max (20,10): "</span><< Max(<spanclass="number">20</span>,<spanclass="number">10</span>) <<<spanclass="built_in">endl</span>;</span><br><spanclass="line"><spanclass="built_in">cout</span><<<spanclass="string">"Max (0,200): "</span><< Max(<spanclass="number">0</span>,<spanclass="number">200</span>) <<<spanclass="built_in">endl</span>;</span><br><spanclass="line"><spanclass="built_in">cout</span><<<spanclass="string">"Max (100,1010): "</span><< Max(<spanclass="number">100</span>,<spanclass="number">1010</span>) <<<spanclass="built_in">endl</span>;</span><br><spanclass="line"><spanclass="keyword">return</span><spanclass="number">0</span>;</span><br><spanclass="line">}</span><br></pre></td></tr></table></figure>