-
內存管理
資源獲得初始化原則(RAII)
構造函數 創建資源
析構函數 銷毀資源
查看全部 -
+
virtual int work(); 虛函數 該staff 類里也可實現
virtual int? work()=0;純虛函數,只聲明,不實現。
虛函數不能實例化對象。
純虛函數的類只能被繼承,不能被實例化
查看全部 -
對象分配到堆上,new 用來分配對象,delete 用來刪除對象。new 會返回一個指針,在使用完畢后,要通過 delete 把這個指針指向的地址釋放掉。
??Staff?*?st1?=?new?Staff(); ??//?記得釋放 ??delete?st1;
棧上實例化:
??Staff?st1;
查看全部 -
函數指針funcp指向函數funcl;
int?(*funcP)(int?a)=funcl;
int 函數返回值類型
funcP?指針名
int a?函數輸入值
funcl? 指針指向的函數
int?ret=(*funcP)(5);
通過指針調用函數,將返回值賦給ret
?
查看全部 -
#include?<stdio.h> int?main(int?argc,char?**argv) { ????int?arr[]?=?{1,?2,?3,?4}; ????int?*?p?=?arr; ????return?0; }
*(p+2)
等價于
arr[2]
查看全部 -
普通變量用點,指針用箭頭
查看全部 -
現在大部分的機器,都采用了小端字節序。但是在 IO 方面,則大部分使用大端字節序。例如,你要使用網絡發送一個 int 類型的變量,要先把 int 轉換成大端字節序,然后通過網絡發送。
大端字節序又被稱之為網絡細節序。
查看全部 -
面向對象:
各司其職
解耦合思想
結合大象進冰箱的例子
以及函數指針的使用(產品經理提需求,合作開發)查看全部 -
要通過基類(父類)釋放子類的對象,必須將父類的析構函數設置為virtual.
查看全部 -
static int a
定義靜態變量
查看全部 -
memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度;
例:
char a[100], b[50];
memcpy(b, a,sizeof(b)); //注意如用sizeof(a),會造成b的內存地址溢出。
strcpy就只能拷貝字符串了,它遇到'\0'就結束拷貝;例:
char a[100], b[50];
strcpy(a,b);
查看全部 -
將父類的析構函數聲明為虛函數,作用是用父類的指針刪除一個派生類對象時,派生類對象的析構函數會被調用。例如:
class Staff
{
public:
? ?std::string name;
? ?int age;
? ?virtual ~Staff()
? ?{
? ?}
}
class Coder : public Staff
{
public:
? ?std::string language;
? ?virtual ~Coder()
? ?{
? ?}
};
int main(int argc,char **argv)
{
? ?Staff * s = new Coder();
? ?delete s;
? ?return 0;
}此時如果析構函數不加 virtual,那么 delete 父類指針的時候,子類的析構就不會被調用,某些情況下會導致內存泄漏。
查看全部 -
將父類的析構函數聲明為虛函數,作用是用父類的指針刪除一個派生類對象時,派生類對象的析構函數會被調用。例如:
class Staff
{
public:
? ?std::string name;
? ?int age;
? ?virtual ~Staff()
? ?{
? ?}
}
class Coder : public Staff
{
public:
? ?std::string language;
? ?virtual ~Coder()
? ?{
? ?}
};
int main(int argc,char **argv)
{
? ?Staff * s = new Coder();
? ?delete s;
? ?return 0;
}此時如果析構函數不加 virtual,那么 delete 父類指針的時候,子類的析構就不會被調用,某些情況下會導致內存泄漏。
查看全部 -
比較特殊的是,數組名就是一個指針,不過數組名是一個常量指針,不能做累加或者累減操作。
我們可以通過指針來訪問數組元素:
*(p + 2)
同樣,這句話等價于:
p[2]
查看全部 -
浮點數結構復雜,運算速度慢
查看全部
舉報