打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
面试题
  • char c = '\72'; 中的\72代表一个字符,72是八进制数,代表ASCII码字符“:”。

  • 10*a++ 中a先进行乘法运算再自增(笔试中经常喜欢出这类运算符优先级容易混淆的输出问题)。

  • const和static的作用 
    太常见的问题了,下面给出一个较详细的参考答案:

    static关键字:

    1)函数体内static变量的作用范围为函数体。不同于auto变量。该变量的内存只被分配一次。因此其值在下次调用时仍维持上次的值。

    2)在模块内的static全局变量可以被模块内的所有函数访问。但不能被模块外的其他函数访问。

    3)在模块内的static函数只可被这一模块内的其它函数调用。这个函数的使用范围被限制在声明它的模块内。

    4)在类中的static成员变量属于整个类所有,对类的所有对象只有一份复制。

    5)在类中的static成员函数属于整个类所有,这个函数不接受this指针,因而只能访问类的static成员变量。

    const关键字:

    1)欲阻止一个变量被改变,可以使用const关键字。在定义该const变量时,通常需要对它进行初始化。因为以后就没有机会再改变它了。

    2)对指针来说,可以指定指针的本身为const,也可以指定指针所指向的数为const。或二者同时为const。

    3)在一个函数的声明中,const可以修饰形参,表明它是一个输入参数。在函数内不能改变其值。

    4)对于类的成员函数,若指定其为const类型。则表明其是一个常量函数。不能修改类的成员变量。

    5)对于类的成员函数,有时候必须指定其返回值为const类型。以使得其返回值不为“左值”。

  • 注意sizeof不是函数而是运算符,所以在计算变量所占用空间大小时,括号是可以省略的,但在计算类型大小时括号则不能省略,比如int i = 0; 则sizeof int是错误的。

  • 有1,2,…,n的无序数组,求排序算法,并且要求时间复杂度为O(n),空间复杂度O(1),使用交换,而且一次只能交换两个数。

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="pln"></span><span class="hljs-preprocessor" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="com">#include</span><span class="pln"> </span><span class="str"><stdio.h></span></span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> a</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">10</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">6</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">9</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">7</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">1</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">3</span></span><span class="pun">};</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> i</span><span class="pun">,</span><span class="pln"> tmp</span><span class="pun">;</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> len </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">sizeof</span></span><span class="pun">(</span><span class="pln">a</span><span class="pun">)</span><span class="pln"> </span><span class="pun">/</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">sizeof</span></span><span class="pun">(</span><span class="pln">a</span><span class="pun">[</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">0</span></span><span class="pun">]);</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">for</span></span><span class="pun">(</span><span class="pln">i </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> len</span><span class="pun">;)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">        tmp </span><span class="pun">=</span><span class="pln"> a</span><span class="pun">[</span><span class="pln">a</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">1</span></span><span class="pun">];</span><span class="pln">        a</span><span class="pun">[</span><span class="pln">a</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="pun">-</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">1</span></span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> a</span><span class="pun">[</span><span class="pln">i</span><span class="pun">];</span><span class="pln">        a</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> tmp</span><span class="pun">;</span><span class="pln">        </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">if</span></span><span class="pun">(</span><span class="pln">a</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]</span><span class="pln"> </span><span class="pun">==</span><span class="pln"> i </span><span class="pun">+</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">1</span></span><span class="pun">)</span><span class="pln"> i</span><span class="pun">++;</span><span class="pln">    </span><span class="pun">}</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">for</span></span><span class="pun">(</span><span class="pln">i </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"> i </span><span class="pun"><</span><span class="pln"> len</span><span class="pun">;</span><span class="pln"> </span><span class="pun">++</span><span class="pln">i</span><span class="pun">)</span><span class="pln">        </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">printf</span></span><span class="pun">(</span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"%d "</span></span><span class="pun">,</span><span class="pln"> a</span><span class="pun">[</span><span class="pln">i</span><span class="pun">]);</span><span class="pln">    </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">printf</span></span><span class="pun">(</span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"\n"</span></span><span class="pun">);</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">return</span></span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">0</span></span><span class="pun">;</span><span class="pln"></span><span class="pun">}</span></code>
  • 易误解:如果int a[5], 那么a与&a是等价的,因为两者地址相同。 
    解答:一定要注意a与&a是不一样的,虽然两者地址相同,但意义不一样,&a是整个数组对象的首地址,而a是数组首地址,也就是a[0]的地址,a的类型是int[5],a[0]的类型是int,因此&a+1相当于a的地址值加上sizeof(int) * 5,也就是a[5],下一个对象的地址,已经越界了,而a+1相当于a的地址加上sizeof(int),即a[1]的地址。

  • 如何将一个小数分解成整数部分和小数部分? 
    要记得利用头文件中的库函数modf,下面是函数原型(记住一些实用的库函数,避免自己重写):

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">modf</span></span><span class="pun">(</span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> num</span><span class="pun">,</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">i</span><span class="pun">);</span><span class="pln"> </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 将num分解为整数部分*i和小数部分(返回值决定)</span></span></code>
  • 可作为函数重载判断依据的有:参数个数、参数类型、const修饰符; 
    不可以作为重载判断依据的有:返回类型。

  • 程序输出题:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> a</span><span class="pun">[</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">10</span></span><span class="pun">]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="pun">{</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">1</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">2</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">3</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">4</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">5</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">6</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">7</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">9</span></span><span class="pun">,</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">10</span></span><span class="pun">};</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">p </span><span class="pun">=</span><span class="pln"> </span><span class="pun">&(</span><span class="pln">a </span><span class="pun">+</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">1</span></span><span class="pun">)[</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">3</span></span><span class="pun">];</span><span class="pln"> </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">printf</span></span><span class="pun">(</span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"%d\n"</span></span><span class="pun">,</span><span class="pln"> </span><span class="pun">*</span><span class="pln">p</span><span class="pun">);</span></code>

    输出:5 
    说明:因为a+1指向a的第二个元素,[3]表示再向后移动3个元素。

  • 程序输出题:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> str1</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> str2</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> str3</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> str4</span><span class="pun">[]</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">str5 </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">str6 </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">str7 </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">str8 </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="pun">(</span><span class="pln">str1 </span><span class="pun">==</span><span class="pln"> str2</span><span class="pun">)</span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> endl</span><span class="pun">;</span><span class="pln"> </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="pun">(</span><span class="pln">str3 </span><span class="pun">==</span><span class="pln"> str4</span><span class="pun">)</span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> endl</span><span class="pun">;</span><span class="pln"> </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="pun">(</span><span class="pln">str5 </span><span class="pun">==</span><span class="pln"> str6</span><span class="pun">)</span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> endl</span><span class="pun">;</span><span class="pln"> </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="pun">(</span><span class="pln">str7 </span><span class="pun">==</span><span class="pln"> str8</span><span class="pun">)</span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> endl</span><span class="pun">;</span></code>

    输出:0 0 1 1 
    说明:输出str1~str8的地址为:

    0x23aa80 
    0x23aa70 
    0x23aa60 
    0x23aa50 
    0x23aa48 
    0x23aa40 
    0x23aa38 
    0x23aa30

    输出str1~str8内容“abc”的存储地址为:

    0x23aa80 
    0x23aa70 
    0x23aa60 
    0x23aa50 
    0x100403030 
    0x100403030 
    0x100403030 
    0x100403030

    可以发现str1~str4中的内容是存在栈上,地址各不相同,而str5~str8的内容都是存储在常量区,所以地址都相同。

    注意:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> </span><span class="pun">*</span><span class="pln">str </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"abc"</span></span><span class="pun">;</span><span class="pln"></span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">printf</span></span><span class="pun">(</span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"%p\n"</span></span><span class="pun">,</span><span class="pln"> str1</span><span class="pun">);</span><span class="pln">  </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="pun">&</span><span class="pln">str1 </span><span class="pun"><<</span><span class="pln"> endl</span><span class="pun">;</span></code>

    上面打印的是字符串 “abc”的地址,下面打印的是 str1 变量的地址。

  • C的结构体和C++结构体的区别

    (1)C的结构体内不允许有函数存在,C++允许有内部成员函数,且允许该函数是虚函数。所以C的结构体是没有构造函数、析构函数、和this指针的。 
    (2)C的结构体对内部成员变量的访问权限只能是public,而C++允许public,protected,private三种。 
    (3)C语言的结构体是不可以继承的,C++的结构体是可以从其他的结构体或者类继承过来的。

    以上都是表面的区别,实际区别就是面向过程和面向对象编程思路的区别:

    C的结构体只是把数据变量给包裹起来了,并不涉及算法。 
    而C++是把数据变量及对这些数据变量的相关算法给封装起来,并且给对这些数据和类不同的访问权限。 
    C语言中是没有类的概念的,但是C语言可以通过结构体内创建函数指针实现面向对象思想。

  • 如何在类中定义常量成员并为其初始化? 
    解答:只能在初始化列表里对const成员初始化,像下面这样:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> m_price</span><span class="pun">;</span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">()</span><span class="pln"> </span><span class="pun">:</span><span class="pln">m_price</span><span class="pun">(</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8.8</span></span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln"></span><span class="pun">};</span></code>

    下面的做法是错误的:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> m_price</span><span class="pun">;</span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">        m_price </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8.8</span></span><span class="pun">;</span><span class="pln">    </span><span class="pun">}</span><span class="pln"></span><span class="pun">};</span></code>

    而下面的做法虽未报错,但有个warning,也不推荐:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> m_price </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8.8</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 注意这里若没有const则编译出错</span></span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln"></span><span class="pun">};</span></code>
  • 在定义类的成员函数时使用mutable关键字的作用是什么? 
    解答:当需要在const方法中修改对象的数据成员时,可以在数据成员前使用mutable关键字,防止出现编译出错。例子如下:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">mutable</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> m_price</span><span class="pun">;</span><span class="pln">  </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 如果不加就会出错</span></span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">(</span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> price</span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln">m_price</span><span class="pun">(</span><span class="pln">price</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> getPrice</span><span class="pun">()</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pun">;</span><span class="pln"> </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 定义const方法</span></span><span class="pln"></span><span class="pun">};</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pun">::</span><span class="pln">getPrice</span><span class="pun">()</span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">const</span></span><span class="pln"> </span><span class="pun">{</span><span class="pln">    m_price </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">9.8</span></span><span class="pun">;</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">return</span></span><span class="pln"> m_price</span><span class="pun">;</span><span class="pln"></span><span class="pun">}</span></code>
  • 构造函数、拷贝构造函数、析构函数的调用点和顺序问题,如下面这个例子输出是什么?

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">        </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"constructor is called.\n"</span></span><span class="pun">;</span><span class="pln">    </span><span class="pun">}</span><span class="pln">    </span><span class="pun">~</span><span class="typ">CBook</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">        </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"destructor is called.\n"</span></span><span class="pun">;</span><span class="pln">    </span><span class="pun">}</span><span class="pln"></span><span class="pun">};</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">void</span></span><span class="pln"> invoke</span><span class="pun">(</span><span class="typ">CBook</span><span class="pln"> book</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 对象作为函数参数,如果这里加了个&就不是了,因为加了&后是引用方式传递,形参和实参指向同一块地            </span></span><span class="pln">                          </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 址,就不需要创建临时对象,也就不需要调用拷贝构造函数了</span></span><span class="pln">    </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> </span><span class="hljs-string" style="box-sizing: border-box; color: rgb(136, 0, 0); outline: none !important;"><span class="str">"invoke is called.\n"</span></span><span class="pun">;</span><span class="pln"></span><span class="pun">}</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">    </span><span class="typ">CBook</span><span class="pln"> c</span><span class="pun">;</span><span class="pln">    invoke</span><span class="pun">(</span><span class="pln">c</span><span class="pun">);</span><span class="pln"></span><span class="pun">}</span></code>

    解答:注意拷贝构造函数在对象作为函数参数传递时被调用,注意是对象实例而不是对象引用。因此该题输出如下:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="pln">constructor </span><span class="kwd">is</span><span class="pln"> called</span><span class="pun">.</span><span class="pln">invoke </span><span class="kwd">is</span><span class="pln"> called</span><span class="pun">.</span><span class="pln">destructor </span><span class="kwd">is</span><span class="pln"> called</span><span class="pun">.</span><span class="pln">  </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 在invoke函数调用结束时还要释放拷贝构造函数创建的临时对象,因此这里还调用了个析构函数</span></span><span class="pln">destructor </span><span class="kwd">is</span><span class="pln"> called</span><span class="pun">.</span><span class="pln">  </span></code>

    引申:拷贝构造函数在哪些情况下被调用? 
    (1)函数的参数为类对象且参数采用值传递方式; 
    (2)将类对象做为函数的返回值。

  • C++中的explicit关键字有何作用? 
    解答:禁止将构造函数作为转换函数,即禁止构造函数自动进行隐式类型转换。 
    例如CBook中只有一个参数m_price,在构建对象时可以使用CBook c = 9.8这样的隐式转换,使用explicit防止这种转换发生。

  • 在C++中,如果确定了某一个构造函数的创建过程,在该构造函数中如果调用了其它重载的构造函数,它将不会执行其它构造函数的初始化列表部分代码,而是执行函数体代码,此时已经退化成普通函数了。例子说明如下:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> m_price</span><span class="pun">;</span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">        </span><span class="typ">CBook</span><span class="pun">(</span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8.8</span></span><span class="pun">);</span><span class="pln">    </span><span class="pun">}</span><span class="pln">    </span><span class="typ">CBook</span><span class="pun">(</span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> price</span><span class="pun">)</span><span class="pln"> </span><span class="pun">:</span><span class="pln"> m_price</span><span class="pun">(</span><span class="pln">price</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="pun">}</span><span class="pln"></span><span class="pun">};</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> main</span><span class="pun">()</span><span class="pln"> </span><span class="pun">{</span><span class="pln">    </span><span class="typ">CBook</span><span class="pln"> c</span><span class="pun">;</span><span class="pln">    </span><span class="hljs-built_in" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="pln">cout</span></span><span class="pln"> </span><span class="pun"><<</span><span class="pln"> c</span><span class="pun">.</span><span class="pln">m_price </span><span class="pun"><<</span><span class="pln"> endl</span><span class="pun">;</span><span class="pln">  </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 此时并不会输出理想中的8.8</span></span><span class="pln"></span><span class="pun">}</span></code>
  • 静态数据成员只能在全局区域进行初始化,而不能在类体中进行(构造函数中初始化也不行),且静态数据成员不涉及对象,因此不受类访问限定符的限制。 
    例子说明如下:

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pln"> </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">static</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> m_price</span><span class="pun">;</span><span class="pln"></span><span class="pun">};</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">double</span></span><span class="pln"> </span><span class="typ">CBook</span><span class="pun">::</span><span class="pln">m_price </span><span class="pun">=</span><span class="pln"> </span><span class="hljs-number" style="box-sizing: border-box; color: rgb(0, 136, 0); outline: none !important;"><span class="lit">8.8</span></span><span class="pun">;</span><span class="pln">  </span><span class="hljs-comment" style="box-sizing: border-box; color: rgb(136, 136, 136); outline: none !important;"><span class="com">// 只能在这初始化,不能在CBook的构造函数或直接初始化</span></span></code>
  • C++中可以重载的运算符:new/delete、new[]/delete[]、++等。 
    不可以重载的运算符:、.、::、?:、sizeof、typeid、.、**、不能改变运算符的优先级。

    引申:重载++和–时是怎么区分前缀++和后缀++的? 
    例如当编译器看到++a(先自增)时,它就调用operator++(a); 
    但当编译器看到a++时,它就调用operator++(a, int)。即编译器通过调用不同的函数区别这两种形式。

  • C++的多态性分为静态多态和动态多态。 
    静态多态性:编译期间确定具体执行哪一项操作,主要是通过函数重载和运算符重载来实现的; 
    动态多态性:运行时确定具体执行哪一项操作,主要是通过虚函数来实现的。

  • 虚函数原理考点,例如下面程序的输出是什么?

    <code class="language-cpp hljs  prettyprint" style="box-sizing: border-box; font-family: 'Source Code Pro', monospace; padding: 0.5em; color: rgb(0, 0, 0); border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; display: block; outline: none !important; background-color: transparent !important; background-position: initial initial; background-repeat: initial initial;"><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">class</span></span><span class="pln"> A </span><span class="pun">{</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">public</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">virtual</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">void</span></span><span class="pln"> funa</span><span class="pun">();</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">virtual</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">void</span></span><span class="pln"> funb</span><span class="pun">();</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">void</span></span><span class="pln"> func</span><span class="pun">();</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">static</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">void</span></span><span class="pln"> fund</span><span class="pun">();</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">static</span></span><span class="pln"> </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> si</span><span class="pun">;</span><span class="pln"></span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">private</span></span><span class="pun">:</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">int</span></span><span class="pln"> i</span><span class="pun">;</span><span class="pln">    </span><span class="hljs-keyword" style="box-sizing: border-box; font-weight: bold; outline: none !important;"><span class="kwd">char</span></span><span class="pln"> c</span><span class="pun">;</span><span class="pln"></span><span class="pun">};</span></code>

    问:sizeof(A) = ?

    解答: 
    关于类占用的内存空间,有以下几点需要注意: 
    (1)如果类中含有虚函数,则编译器需要为类构建虚函数表,类中需要存储一个指针指向这个虚函数表的首地址,注意不管有几个虚函数,都只建立一张表,所有的虚函数地址都存在这张表里,类中只需要一个指针指向虚函数表首地址即可。 
    (2)类中的静态成员是被类所有实例所共享的,它不计入sizeof计算的空间 
    (3)类中的普通函数或静态普通函数都存储在栈中,不计入sizeof计算的空间 
    (4)类成员采用字节对齐的方式分配空间

    答案:12(32位系统)或16(64位系统)

  • 虚继承的作用是什么? 
    在多继承中,子类可能同时拥有多个父类,如果这些父类还有相同的父类(祖先类),那么在子类中就会有多份祖先类。例如,类B和类C都继承与类A,如果类D派生于B和C,那么类D中就会有两份A。为了防止在多继承中子类存在重复的父类情况,可以在父类继承时使用虚函数,即在类B和类C继承类A时使用virtual关键字,例如: 
    class B : virtual public A 
    class C : virtual public A 
    注:因为多继承会带来很多复杂问题,因此要慎用。

  • 本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
    打开APP,阅读全文并永久保存 查看更多类似文章
    猜你喜欢
    类似文章
    【热】打开小程序,算一算2024你的财运
    几种常见的激活函数
    Android屏幕适配方案
    你不知道的Linux下的常用查找命令
    Android日志打印类LogUtils,能够定位到类名,方法名以及出现错误的行数并保存日志文件
    Loss和神经网络训练
    iOS开发UITableViewCell的选中时的颜色设置
    更多类似文章 >>
    生活服务
    热点新闻
    分享 收藏 导长图 关注 下载文章
    绑定账号成功
    后续可登录账号畅享VIP特权!
    如果VIP功能使用有故障,
    可点击这里联系客服!

    联系客服