C++課堂筆記

建議初學者使用suse的linux操作系統
GNU gun is not unix
函數就是方法
有空詳細研究PPT文件
array數組
gimps project尋找梅伸素數
數據結構
數學建模

&是取址運算符

指針中去掉*纔是地址,否則就是值
ptr地址
*ptr值

返回值中: 0表示FAILS ,其他值表示TURE
重載的時候必須是成員函數,不能是友員函數

derivedclass 派生類
baseclass基類


對基類私有函數調用使用:
類名::私有成員函數名

通過虛函數,達到用基類指針訪問派生類成員函數,個人認爲這真正體現了繼承
指針調用成員函數:指針->調用成員函數;
純虛函數 ,就是在定義的時候後面給定=0(也可以在派生類中給出定義)
包含一個或多個純虛函數的類叫做抽象類
抽象類可以做爲派生同一種類的特定類的基類
抽象類不能實例化,但可以通過繼承實現,所有的全通過派生類來完成

動態多態由稱爲動態聯編,滯後聯編

沒使用指針會造成很多不必要的麻煩,自己應當多關注指針,指針是個很好也很好玩的玩意兒
同時,繼承也能夠在很大程度上簡化程序的源代碼, 是個不可多得的好工具

rectangle:n.矩形,長方形
square:n.正方形
triangle:n.三角形
pure class funtion純虛函數

ambiguous歧義
運算符重載,一元運算符重載:把運算符做成類的成員函數

多重繼承那裏注意在virtual後面要加上public否則會認爲是私有的類

this用法舉例:this.aaa=aaa;

 

函數重載的問題及解決方案
重載機制的不足:參數數據類型發生變化,返回時的不到正確的結果
提出問題:如何簡化代碼???
解決方法:函數模板(是函數,一種通用型的函數)
{
template<class T>  //定義函數模板class是數據類型,不是一個類 ,但可以認爲是一個類。T可以爲任意值
T 函數名字(參數列表)   //以下爲函數體  如T sum(T a,T1 b)

函數返回類型爲第一個實參的類型
{
  //定義函數體
}


}
不能用於字符串的比較,必須重寫,如下(字符串的重載):
const char* max(const char* a,const char* b)
{
if(strcmp(a,b)>0)return a;  //strcmp字符串比較大小的模板函數
//else可以不寫出

return b;
}


引入結構體的目的:將不同類型的數據組合成一個有機整體以便引用
結構體定義:在一 個組合項中包含若干

struct student//定義結構體
{
int num;
char name;
char sex;
float mark;

};
經常將對結構體類型的生命集中

使用方法:
結構體變量名.成員名 
結構體變量的初始化:
在定義時

插入 insertion   抽取 estraction  流stream

ios->streambuf   //streambuf 類爲IOS類及其派生類提供對數據的緩衝支持
緩衝(buffer):系統在主存中開闢一個專用的區域用來臨時存放輸入輸出信息,這個區域成爲緩衝區

iostream 包含成員函數:cin  cout  cerr標準錯誤輸出   clog標準日誌輸出

alarm警報

類的參數可以用void disp(char *str)參數爲字符串,這個等同於void disp(char str[])

(void *)cptr強制轉換CPTR爲指針,其中void *代表了空指針也可以看作是一種類型

單引號表示'a'表示ASCII碼
雙引號表示"a"字符
cin.get(char *str,int len,char delim='/n')函數原型,從鍵盤讀取數據(char *str,int len,char delim='/n')str字符數爲定義的len
cin.getline(char *str,int len,char delim='/n')提取一行字符
儘量使用getline而不用get
cin.read(char *pch,int nCount)

文件輸入輸出流,可以調用帶一個參數的構造函數
ifstream infile("file1.txt")//在這裏inflie和file1.txt可以認爲是同一個文件,但是在別的地方可以變換
iftream::open是調用庫裏的一個lib的成員函數,需要在#include裏聲明
讀寫文件有兩種方法:用函數調用成員函數和創建對象
ofstream裏絕對路徑不用“/”而是使用"//"表示
寫入數據不建議使用PUT因爲那隻能寫入一個字符
使用完文件後,使用:對象.close()及時關閉已打開的文件(例如:object.close()),爲了防止文件在緩衝區內被其他進程被更改,文件不能被再次加載
文件從順序上分:隨機文件,數組文件
sfil.write((char*)&svar,sizeof(student))固定寫法,寫完記得關閉文件。sizeof可以理解爲運算符,是查看student佔用字節數的。svar應該是參數

ios::binary    以二進制方
式打開文件要用管道的話,就只能用read或write而不能用get或者put

修改一個文件內容,使用文件隨機處理方式
一、以輸入/輸出模式打開文件
二、查找需要修改的記錄
三、將指針置於需要修改的記錄之首
四、修改值並在同一個地方重寫此記錄
五、關閉文件
istream& seekg(long off,ios::seek_dir dir);//其中的ios::seek_dir 指的是偏移量

在struct結構體中所有的都是公有的,總覺得類是結構體的延伸

鏈表比數組先進的地方在於可以不用連續的內存空間但是運算的速度比較慢 單個的稱爲結點node 空指針NULL
引用數組寫的時候簡單但是讀程序的時候麻煩
*next是個關鍵字,表示下一個結點
建立一個鏈表後,頭指針是不能動的
鏈表頭指針的複製:設count是和head指針類型相同的指針,count=head
這節課,開始涉及到數據結構中的線形表的鏈表結構,講到了遍歷鏈表,單鏈表,雙向鏈表,循環鏈表
使用鏈表的時候最好不用類,而用struct

string是字符和字符串的數據類型定義
要使用鏈表,必須在include包含<string.h>
const是常量的數據類型,在有指針的時候用的很多,作爲固定指針使用
棧可以作爲一個特殊的單鏈表
後綴表達式是棧的重要表達方式,在棧中6+2用後綴表達式62+,速度更快
隊列先進先出,在某些時候是一個比較好的數學分析的工具

 

 


老師說我們的幻燈片頁數做得太少了,主要是我們那裏的字太小了,經研究決定,把原來的一張幻燈片整成兩張,就解決問題了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章