1.reinterpret_cast,static_cast,dynamic_cast、const_cast區別
2.類的大小
class ctest1
;int size = sizeof(ctest1); // 1
class ctest2
static void func2() {}
protected:
static int c;
private:
int a;
char* p;
};int size = sizeof(ctest2); // 12
class ctest3 : public ctest2
;int size = sizeof(ctest3); // 16
class ctest4 : public ctest2
;int size = sizeof(ctest4); // 20
3.char指標
char s = "test";
s[0] = 'a'; // ok
char* p = s;
p[0] = 'a'; // ok
p = "test";
p[0] = 'a'; // error
s = p; // error
char* a = ;
int size = sizeof(a); // 8
char** p1 = a; // ok
4.成員函式指標
class ctest
void func2()
static void func3()
}; typedef void(*func)(void);
typedef void(ctest::*func2)(void);
ctest test;
func f = &ctest::func3;
f(); // func3
func2 f2 = &ctest::func2;
(test.*f2)(); // func2
f2 = &ctest::func;
(test.*f2)(); // func
5.虛函式表
class ctest5
}; typedef void(*func)(void);
ctest5 test;
func f = (func)*((int*)(*(int*)(&test)) + 0);
f(); // test
class cbase
};class cdriver: public cbase
};
cbase *pb = new cdriver;
pb->test(); // driver test
cdriver *pd = dynamic_cast(pb);
pd->test(); // error
6.深拷貝與淺拷貝
class ctest6
~ctest6()
ctest6(const ctest6& test)
private:
int n;
int* p;
};
7.位元組對齊
某些時候需要禁用位元組對齊,如通訊幀定義 #pragma pack(1)
struct mystruct
;int size = sizeof(mystruct); // 24
8.static修飾符
class ctest6
~ctest6()
ctest6(const ctest6& test)
static const int a = 1;
static const float f;
private:
int n;
int* p;
};const float ctest6::f = 0.5f;
9.const修飾的成員函式呼叫非const成員函式
class ctest6
~ctest6()
ctest6(const ctest6& test)
static const int a = 1;
static const float f;
void test1()const
void test2()
private:
int n;
int* p;
}; const float ctest6::f = 0.5f;
ctest6 test;
test.test1(); // test2
C 常見問題
1.預處理 預處理的主要作用就是對資源進行等價替換,最常見的預處理有 檔案包含 include 條件編譯 if,ifndef,ifdef,endif,undef 布局控制 pragma 巨集替換等 define 等。1.1 標頭檔案中放什麼?標頭檔案一般用於類的定義 extern變數和函式的宣告。由...
C 常見問題
問題描述 解決方式 無法解析的外部符號 public cdecl minidl operator operator void 0operator minidl qeaa xz 該符號在函式 public cdecl minidl denseop denseop void 0denseop minid...
c 常見問題
編譯器總是根據型別來呼叫類成員函式。但是乙個派生類的指標可以安全地轉化為乙個基類的指標。這樣刪除乙個基類的指標的時候,c 不管這個指標指向乙個基類物件還是乙個派生類的對 象,調刪除線格式用的都是基類的析構函式而不是派生類的。如果你依賴於派生類的析構函式的 來釋放資源,而沒有過載析構函式,那麼會有資源...