C++基礎知識第一天

1.封裝,繼承,多態。

2.作用域運算符(::)

:: 前面不寫東西,表示調用全局變量

3.名字控制(命名空間(namespace)):

1)命名空間只能在全局範圍內定義

2)命名空間可以嵌套命名空間

3)命名空間是開放的,可以隨時向命名空間添加東西(變量,函數,類等)。

5) 匿名命名空間,默認此空間中的函數,變量等只在當前文件中有效,相當於給每個變量、函數前加入static.

namespace TestA

{

int a; //這是在命名空間中未初始化的定義。 當在命名空間進行定義時,而且此命名空間放在頭文件,當在其他文件進行

//調用時,會產生重複定義的問題,編譯不過。

int b = 9; //這是在命名空間中初始化的定義

extern int c; //這是命名空間中的聲明。

}

4.條件編譯

#pragma once (第一種)

#ifndef ___ ; #define _____; #endif; ____ 代表一個定義的名字。(第二種)

5.bool 類型: bool 類型的變量可以把"任何非0值"轉換為1.

6.三目運算符:C和C++的區別:

C語言中,三目運算符返回的是一個變量的值,沒有內存空間,不可以修改。

int a = 10; int b = 20; a > b ? a : b; (a > b ? a : b) = 30(不可以這樣操作,原因如上);

C++語言中,三目運算符返回的是一個變量本身,具有內存空間,可以修改。

int a = 10; int b = 20; a > b ? a : b; (a > b ? a : b) = 30(可以這樣操作,原因如上)

7.當一個變量有內存空間時(只要在堆棧區),就可以通過它的地址修改內存裡的值

8.const 的使用

如:C語言中,const 修飾的變量是一個只讀變量,具有內存。

C++語言中,const 修飾的為常量不具有內存(有額外情況,下面有),它放在符號表中。

1)C++ 中兩種情況不一樣

const int a = 10; 此時 a 不具有內存,(用一個常量初始化)它放在符號表中。所以不可以對它進行修改。

int b = 9; const int a = b; 此時a 具有內存(在棧區),因為對它進行賦值的是一個變量b(棧區),可以通過指針間接賦值改變 a 的值。

(上面這種情況為用一個變量初始化 const 變量,所以它可以修改)。

2)在局部變量中。( C語言 和 C++ 語言這種情況不一樣)

C++語言中: const int a = 9; int *p = (int *)&a; *p = 99;

此時當對 const 常量 a 取地址,編譯器會為它分配地址(在棧區);但是 a 常量從符號表中取值,不可被修改。

*p 修改的只是分配的內存空間的值。打印結果: a = 9; *p = 99;

C語言中,變量 a 可以被修改。

3)在全局變量( C語言 和 C++ 語言這兩種情況一樣)

extern const int a = 9; int *p = (int *)&a; *p = 99;(第一種)

const int a = 9(它放在全局變量); int *p = (int *)&a; *p = 99(第二種);

此時對 const 變量 a 取地址或聲明 extern 時,編譯器會為它分配地址(在只讀變量區);這段代碼可以編譯通過,但是運行階段會報錯,不

以被運行。

4)C語言中 const 修飾的變量為外部鏈接(和普通變量一樣)。

C++語言中,const 修飾的變量為內部鏈接(和普通變量不一樣)。

不管是C語言還是C++ 語言,普通變量都是外部鏈接。

5)const 與 #define 的不同, const 有類型,有作用域,可進行編譯器類型安全檢查。

#define 無類型,不重視作用域(從定義開始到文件結尾),不可以進行安全檢查。

9.extern 的使用

適用範圍是不同文件之間變量的調用。(不可以再同一文件不同函數之間使用)

在不同文件之間調用一個外部鏈接的變量時,只用在調用的文件中寫一個 extern 關鍵字就可以了。

當調用一個內部鏈接時,需要在被調文件和調用文件中都寫 extern 關鍵字。

10.變量可以定義數組 int n = 9; int arr[n];

:不同編譯器編譯環境效果不同。在vs2013中不可以通過;在QT,linux中可以通過。支持C99的編譯器可以通過。

11.using 編譯指令 與 using 聲明的區別

namespace A{ int a = 9; func(){} }

namespace B{int a = 9; func(){} }

using 聲明: int main(){using A::a; cout << a <

using 編譯指令:int main(){using namespace A; cout <


分享到:


相關文章: