第一節(jié) C++編程簡介
一谚赎、學習課程的前導知識
曾經學過一門編程語言(C為最佳)媚狰,理解一些基礎常用的名詞岛杀,如:變量(variables),類型(types)崭孤,作用域(scope)类嗤,循環(huán)(loops),流程控制辨宠。
了解程序執(zhí)行的前提:編譯土浸,執(zhí)行。
了解如何編譯彭羹,執(zhí)行。
二泪酱、學習課程的目標
培養(yǎng)正規(guī)的、大氣的編程習慣
以良好的方式編寫C++ class
(基于對象 Object Based)
- class with pointer members(Complex)
- class with pointer members(String)
學習class之間的關系
(面向對象 Object Oriented)
- 繼承
- 復合
- 委托
三、C++的歷史
- B語言(1969)
- C語言(1972)
- C++語言(1983)
(new C->C with Class->C++) - Java語言
- C#語言
四呈础、C++的演化
C++分為C++語言和C++標準庫兩個部分瓤狐。
- C++98(1.0)
- C++03(TR1)
- C++11(2.0)
- C++14
五、推薦書單
- 《C++ Primer》
- 《C++ PROGRAMMING LANGUAGE》
- 《Effective C++》
- 《THE C++ STANDARD LIBRARY》
- 《STL源碼剖析》
第二節(jié) 頭文件與類的聲明
回頭看看發(fā)現(xiàn)第一節(jié)的筆記完全就是copy了侯老師的ppt…<+.+>!…這節(jié)來換個風格斯撮,嘿嘿经伙。這節(jié)課的內容不多也很簡單,就挑兩個相對重要的知識點分享一下吧。
一帕膜、 c++ programs
我們在開始寫代碼之前枣氧,一定要對自己即將實現(xiàn)的東西有個大概的構想。下面是一個C++ programs代碼的基本形式垮刹。
//lalala.h文件
class lalala
{
pirvate:
//
public:
//
};
//test.cpp文件(入口)
#include<iostream>
#include<string> //標準庫頭文件
#include"lalala.h" //自寫頭文件
using namespace std;
int main()
{
return 0;
}
也就是說一個標準的C++ programs通常要包含.h文件达吞,.cpp文件,有時也會調用c++標準庫的頭文件荒典。
二酪劫、防衛(wèi)式聲明(guard)
在我們觀察大牛或者視頻學習的過程中寺董,總會在他們的頭文件中看到下面的代碼覆糟,那么它究竟有什么用呢?
#ifndef LALALA_H
#define LALALA_H
/////
#endif
簡單來說遮咖,這是通過宏功能來防止重復調用該頭文件滩字。
#ifndef LALALA_H //如果LALALA_H這里沒有被使用
#define LALALA_H //則將下方的內容進行宏替換到LALALA_H
/*替換內容*/
#endif //結束替換
讓我們來試驗一下。
現(xiàn)在我寫了三個文件盯滚,分別是test.cpp(入口),lalala.h,lalala1.h踢械。它們的定義如下圖所示。
//test.cpp
#include<iostream>
#include"lalala.h"
#include"lalala1.h"
using namespace std;
int main()
{
lalala a;
return 0;
}
//lalala.h
//#ifndef LALALA_H
//#define LALALA_H
class lalala
{
private:
//
public:
//
};
//#endif
//lalala1.h
#include"lalala.h"
它們的包含關系如下圖所示:
這樣一來test.cpp就包含了兩個lalala.h魄藕,在編譯時會提示“‘class’ type redefinition”内列。這時只需要為重復調用的頭文件lalala.h加上防衛(wèi)式聲明即可(注釋掉的部分)。為了保險起見背率,不論是否有被重復調用的可能话瞧,我們都為頭文件加上這樣的聲明。
第三節(jié) 構造函數(shù)
來分享下這堂課的心得寝姿。
- class函數(shù)可以在類內定義(inline)也可以在類外定義
- 盡量為所有function使用inline修飾
- 能否成為inline函數(shù)最終取決于編譯器
- 變量的初始化分兩步交排,第一步為創(chuàng)建,第二步為賦值饵筑。參數(shù)列表是在第一步創(chuàng)建變量時進行初始化埃篓,所在類中盡可能使用參數(shù)列表而非賦值進行初始化
- 內容不多,相對簡單根资,就分享這么多吧架专。
第四節(jié) 參數(shù)傳遞與返回值
這節(jié)內容比較有趣,分享一下~
- 構造函數(shù)可以放在private中(例如Singleton設計模式中)
- 盡量為只進行讀操作的函數(shù)使用const修飾(在函數(shù)名之后玄帕,例如double real() const{…})
- 接口是一個類的框架
- 用const修飾實例則實例為一個常量部脚,其中的函數(shù)只有讀權限(即使用const修飾函數(shù))
- pass by value(值)/reference(to const)(引用,指針4字節(jié))盡可能選擇后者
- 引用是一種受限制的指針裤纹,類似棧委刘,隊列與鏈表的關系
- pass by referennce通常使用在兩種場景,一種是用作參數(shù)傳遞,另一種為返回值傳遞锡移。做參數(shù)傳遞時盡可能使用const修飾(除非打算修改其中的值)呕童。當在返回值傳遞時,不可以使用在local object上(函數(shù)執(zhí)行完畢會被銷毀罩抗,其中變量的引用會指向一個不明確的地方)
- friend友元函數(shù)會破壞class的封裝性拉庵,不宜多用
- 相同class的各個object互為友元(complex c1,c2 將c1作為參數(shù)傳進c2中的成員函數(shù)func(),func()函數(shù)可以調用參數(shù)c1的私有成員)
- _doapl=>do assignment plus