1. 程式人生 > >C++ 中的一些錯覺

C++ 中的一些錯覺

free color users main light cli .com led tor

1.

默認構造函數和不帶參數的構造函數之間無聯系

默認構造函數是編譯器發現類不存在顯式構造函數時自動生成的無參數的構造函數。同樣,用戶可以定義顯示的無參數構造函數。

2.

在構造函數、析構函數中調用virtual 函數。並不會得到預期的結果。virtual函數在此時會"丟失"virtual性質。

3.

構造函數無參數的時候

 1 #ifndef UNTITLED2_TEST_H
 2 #define UNTITLED2_TEST_H
 3 
 4 #include <stdio.h>
 5 class test {
 6 public:
 7     test()
 8     {
9 printf("call test()\n"); 10 } 11 test(char c) 12 { 13 printf("call test(char)"); 14 } 15 }; 16 17 18 #endif //UNTITLED2_TEST_H
1 #include "test.h"
2 int main() {
3     test t;//申明一個變量
4     test tt();//聲明一個函數。
5     test tc(c); //申明一個變量
6     return 0;
7 }
/Users/like1/CLionProjects/untitled2/cmake-build-debug/untitled2
call test()
call test(char)
Process finished with exit code 0

test t();並不會像test t;調用test::test()構造函數,僅僅是申明了一個函數,返回類型是test,無參數,函數名是t。

4.

test tc = t;

test* t = &tc;

並不會調用operator=(test& t);而是調用test(test& t);

5.

new delete 和 malloc() free() 的行為存在共性,但不等價。

new 和 delete 會在分配內存後調用類的構造函數,析構函數。

6.

待續

http://www.cnblogs.com/like1/p/6852528.html

C++ 中的一些錯覺