main函數
控制台程式
int main() {
return ;
}
int main(int argc,char* argv[]) {
return ;
}
windows程式
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow) {
return ;
}
基本資料類型
類型 | 含義 | 位數 |
---|---|---|
bool | 布爾型 | - |
char | 字元型 | 8位 |
short | 短整型 | 16位 |
int | 整型 | 32位 |
long | 長整型 | 32位 |
float | 單精度浮點型 | 6位有效數字 |
double | 雙精度浮點型 | 10位有效數字 |
char、short、int、long均可加signed、signed修飾,表示有無符号,無符号值域大于0,正數範圍比有符号大一倍。
帶類型常量表示:
20 十進制
024 八進制
0x14 十六進制
0.5f 單精度浮點
預設的浮點常量位double型
運算符
-算數運算符
加号(+),減号(-),乘号(*),除号(/),取模(%)
-指派運算符
=
-自動遞增遞減
遞增(++),遞減(–)
-關系運算符
大于(>),小于(<),大于等于(>=),小于等于(<=),等于(==),不等于(!=)。等于和不等于适用于所有内建的資料類型,但其他比較不适用于boolean 類型
-邏輯運算符
AND(&&),OR(||),NOT(!),隻可将AND,OR 或NOT 應用于布爾值。”短路”,一旦邏輯運算表達式的值已經求出,後續表達式不計算值。
-按位運算符
若兩個輸入位都是1,則按位AND運算符(&)在輸出位裡生成一個1;否則生成0。
若兩個輸入位裡至少有一個是1,則按位OR 運算符(|)在輸出位裡生成一個1;隻有在兩個輸入位都是0的情況下,它才會生成一個0。
若兩個輸入位的某一個是1,但不全都是1,那麼按位XOR(^,異或)在輸出位裡生成一個1。
按位NOT(~,也叫作“非”運算符)屬于一進制運算符;它隻對一個自變量進行操作(其他所有運算符都是二進制運算符)。按位NOT生成與輸入位的相反的值——若輸入0,則輸出1;輸入1,則輸出0。
按位運算符可與等号(=)聯合使用,以便合并運算及指派:&=,|=和^=都是合法的(由于~是一進制運算符,是以不可與=聯合使用)。
-移位運算符
移位運算符面向的運算對象也是二進制的“位”。可單獨用它們處理整數類型(主類型的一種)。
左移位運算符(<<)能将運算符左邊的運算對象向左移動運算符右側指定的位數(在低位補0)。
右移位運算符(>>)高位依據資料正負決定補0還是1
-三元if-else運算符
布爾表達式 ? 值0:值1
-逗号運算符
逗号不僅作為函數自變量清單的分隔符使用,也作為進行後續計算的一個運算符使用。
-箭頭操作符
->
類成員函數或者變量使用
-sizeof
求取類型占用位數
控制流
-i f- e l s e
int result = ;
if(testval > target)
result = -;
else if(testval < target)
result = +;
else
result = ; // match
return result;
-while
while(布爾表達式)
語句
-do while
do
語句
while(布爾表達式)
-for
for( char c = ; c < ; c++) {
if (c != ) // ANSI Clear screen
System.out.println("value: " + (int)c +" character: " + c);
}
-break,continue
break 用于強行退出循環,不執行循環中剩餘的語句。而continue 則停止執行目前的反複,然後退回循環起始和,開始新的反複。
-switch
switch(選擇因子) {
case 整數值 : 語句; break;
case 整數值 : 語句; break;
case 整數值 : 語句; break;
case 整數值 : 語句; break;
case 整數值 : 語句; break;
//..
default:語句;
}
數組
int b[2][3]={{0,0,0},{0,0,0}}; // 定義一個二維整型數組
也可以[]空着,由初始化值自動決定維數
數組通路下表區間0-length-1
指針
int a = ;
int *p = NULL;
int *p1 = &a;
int *p[]; 指針數組
int (*p)[]; 指向數組的指針
引用
int &i = a; i引用a
引用變量與被引用變量是同一位址
int *&p; 指針引用
枚舉
enum Cities {
Guangzhou = ,
Shenzhen = ,
Hongkong = ,
Shanghai = ,
Beijing = ,
Chongqi =
};
const
const int i = ; // 常量
const int *p;
int const *p;
以上兩種等同,可以修改指向的對象,但不能修改指向對象的值;
int * const p;
這種不能修改指向的對象,但能修改指向的對象的值。
const修飾函數
int set(const int i) {
++i; // error,const修飾,無法修改
}
一般不如上使用,畢竟值傳遞,本身不會影響實參的值,對指針以及引用類型修飾會比較有用
const int* getPoint() {
....
}
修飾傳回值,表示該指針指向對象的值不能修改
class A {
void func() const {
} //常成員函數, 它不改變對象的成員變量. 也不能調用類中任何非const成員函數。
}
static
修飾類成員函數或者成員變量的話,表示成員函數或者變量為類所有,靜态的
修飾類外的全局變量的話,表示該變量作用域位該檔案,無法被extern
靜态局部變量,函數中static修飾的局部變量,這種變量一旦被初始化後就一直存在,隻會初始化一次,随着函數的調用
typedef
重命名
typedef int Integer;
typedef enum {
shanghai = ,
guangdong
} Cities; //枚舉重命名
typedef int (*func)(int a, char b); //函數指針重命名
函數
int add(int a, int b) {
return a + b;
}
函數參數傳遞方式:
值傳遞、指針傳遞、引用傳遞
值傳遞類型在函數區域内修改值并不能影響函數之外的實參
函數指針
typedef int (*func)(int a, char b); //普通函數指針
typedef int(Object::*func)(int a); //類函數的函數指針
調用
func(a,b);
(*fuc)(a,b); //普通調用
(c->*fuc)(a); //類函數指針的調用
宏定義
頭檔案宏,防止多次包含
#ifndef _CLASS_A_DEFINE_H_
#define _CLASS_A_DEFINE_H_
class A {
};
#endif
#define SAFE_DELETE(p) do { if(p) { delete (p); (p) = ; } } while()
頭檔案
‘#include <> 從系統庫目錄搜尋起,一般用于系統庫頭檔案引用
‘#include “”從目前工程目錄搜尋起,一般用于項目頭檔案
名字空間
為了防止命名沖突,采用名字空間來避免;
源代碼處使用
namespace XXX {
………
}
引用某個名字空間
using namespace XXX;
類
類定義,繼承
A.h
class A {
public:
A();
virtual ~A();
private:
int a,b,c;
}
*********************
A.cpp
A::A()
:a()
,b()
,c()
{
}
A::~A() {
}
**********************
B.h
public class B : public A {
public:
B();
virtual ~B();
private:
int e,f,g;
}
************************
B.cpp
B::B()
: A()
, e()
, f()
, g()
{
}
B::~B() {
}
拷貝構造
class A {
public:
A();
A(const A& a); //拷貝構造函數
}
如果我們沒有定義拷貝構造函數,編譯器會預設生成一個,預設的拷貝構造是淺拷貝,就是值傳遞,指針類成員變量引用的位址相同,是以改動一個對象會影響拷貝後的對象,可以自己實作深度拷貝。
private、protected、public
private私有成員,protected是繼承的類可以通路,public公有成員
友元
class A {
friend class B; // 友元,類
friend void C::func(); //友元,函數
}
類檔案構成
一般由頭檔案(.h)和實作檔案(.cpp)構成,頭檔案中定義,實作檔案實作相關函數
虛函數
class A {
virtual void func(); // 虛函數
}
class B {
virtual void func(); // 虛函數
}
class C {
virtual void func() = ; // 純虛函數
}
其他
- 聲明外部變量
extern int a;
- 類型聲明
class A; 一般用于頭檔案中,防止頭檔案引用過長,導緻編譯速度非常慢。
- 類型轉換
類型自動轉換,内置類型間會自動轉換
float f = 10.5;
int i = f; // 自動将浮點數舍去小數轉換成整數
dynamic_cast: 通常在基類和派生類之間轉換時使用,轉換不成功會傳回null
const_cast: 主要針對const和volatile的轉換,去掉或者增加常量屬性
static_cast: 内置的資料類型間互相轉換,對于類隻能在有聯系的指針類型間進行轉換,不具備繼承關系的類之間無法使用
reinterpret_cast: 用于進行沒有任何關聯之間的轉換,直接會根據二進制資料轉換類型,一般不用
- extern “C”
c++與c編譯器編譯函數後的命名方式不太一緻,用extern “C”方式讓編譯器強制按c方式編譯和尋找函數,達到c++調用c語言實作的函數的目的。
- new delete
c++配置設定記憶體方法
其他擴充内容
- 不定參函數
- 異常處理
- 運算符重載
- 模闆