面向對象的精髓:
主函數其實就是對于類的元素和動作的重新組合來進行一項活動。
一個思想概念:程設是清楚的,完美的。
??????????????數學是清楚的,是完美的。
??????????????物理是有趣的,尤其是量子物理
??????????????生物是清楚的,尤其是基因
?????????????外語是完美的,……
*******************************************************************************
外界的調用??成員函數??protect的不能被外界調用,但是可以是子類調用
限定符???對象的定義和結構體一樣,可以附在后面??默認是私有的(Private)
類中的成員函數之間可以調用的
在類外定義成員函數,但是在類內部要首先及進行申明
::作用域限定符???全局函數??
Inline內置函數(其實是把簡單的代碼段嵌入進來) ??
成員函數指定為內置函數的方法???頭文件
其實是與OS交互的語言,內部的編譯調用理解的
This指針 ???成員函數在存儲上其實和對象是分離的
通過對象的引用變量來訪問對象的成員
定義引用變量??
time t1;
Time &t2=t1;
定義類的對象的方法一般是在主函數里
主函數運行的過程其實就是多個對象在行為而產生的時空狀態的改變?(其實就是通過一個個消息)
頭文件里是類的定義,但是沒有類里函數的定義,防止成員函數閉多次調用要經行多次編譯
類庫
類對象的初始化有一種是和結構體很像的?time t1={14,15,16}; 14 15 16分別對應類的變量
含有主函數的類就是主類,要運行一定有個主類
一個類里要設計自己的變量的set函數嗎。不需要
構造函數(與類同名字函數)它是特殊的成員函數
構造函數的內容自己設計
構造函數當然也是可以在類外定義的,和普通的成員函數一樣,但要記得在類內申明
構造函數也像消息一樣,用于改變狀態,無返回值
類有構造函數是必須的,當定義一個類對象時,就會調用構造函數,并會有初值,然后通過交互改變初值,但是其實還是有交互函數set() ?show()
C++程序的結構就是:有#(用于包含系統文件進來)
???????????????????有多個類及其內部結構
???????????????????有一個主函數,一般主函數是在最后
?????????????******這些是順序關系,用于改變計算機時空狀態,這是程序運行的結果
要深入領會程序不同寫法之間的區別
構造函讓主函數簡單,主函數里面不需要定義函數
構造函數不能被調用,在定義對象的時候自己自動執行
構造函數可以帶參???在類外經行定義構造函數
構造函數的參數在對象定義的時候給出
參數初始化表:
box(int h,int w,int len):height(h),width(w),length(len) { } ?//注意后面的{}不能省
類可以由多個構造方法,但是名字都是一樣的,就是重載
默認構造函數?(缺省構造函數)
構造函數的默認參數??
默認參數構造函數是不能重載的
析構函數:對象結束時候自動執行的??~box()
對象的全局和局部
題目是什么,其實就是知識的變相啊
一個類只能有一個析構函數??
析構函數是類必須有的,可以自己設計,可以補充
析構函數就是插銷對象的內存之前做的工作,完成清理工作
Static局部對象在函數調用后不釋放,所以不進行析構 ,而只有在mian?或是exit函數調用后使用析構
在一個函數中定義一個對象,調用結束時則進行析構函數
有全局對象的析構,析構是作用域完成時候才會調用
用new創建一個對象時,用delect釋放內存時,自動調用該對象的析構
當顯式的定義析構函數時候,對象執行之后會顯示出來
默認的時候是不會顯示出來,其實析構函數的總是存在保證了內存的安全保障
析構函數的調用和構造函數的調用是棧結構,順序是相反的(對象的作用域是很重要的,根據作用域的不同,又是不一定的)
復制構造函數??轉換構造函數??
可以有靜態對象
對象數組?(多個對象組成數組)
Student stud[3];?類的對象數組
對象的構造函數的參數若一個,則:
Student stud[3]={3,4,5};
指針可以指向對象(對象指針)?Time *pt; ?//指向類的指針
(*Pt).hour ??pt->hour是一樣的效果,指向對象的成員變量hour
定義一個函數指針?void (*p) ( );
?????????????????P=fun;
?????????????????(*p)( );//通過指針調用fun函數
?
Void?(Time::*p2)( );//定義指向成員函數的指針
P2=&Time::get_time;//給該指針賦值 ??***這兩句可以合一
This指針,是在成員函數里的指針,指向本類對象 ?this可以是顯式寫一般是隱式(編譯系統補充的)
常對象??Time const ?t1(12,34,46);
常對象不能調用其他非常成員函數
常成員函數??void get_time( ) ?const;
????????????Mutable int count; //這時候就可以用常成員函數來修改該數據變量了
指向對象的常指針??指向常對象的指針變量???指向常變量的指針
??????????????????Const Time *p=&t1; ??????const char ?*p;
Time ?&t ??//t是time對象的引用 ??const ?Box&b;
New box;//動態建立對象,這個對象存在但是不能用,是無名對象,它的返回值是指針
,通過指針來訪問這對象
對象之間的賦值??t1=t2; ?對象之間的賦值只是成員變量,不是成員函數
Box box2(box1);
或者?Box box2=box1;
復制構造函數是隱形的
類中的靜態數據成員代表產生的對象的該屬性是一樣的
靜態的就是公共的。
靜態數據成員可以用類名或者是對象名來引用
靜態成員變量在類外部初始化,不能通過參數初始化表初始化
Int ?Box::length=3;
靜態變量是在類層次的
公用的成員函數可以引用靜態變量
可以在函數中定義類???靜態變量起了全局變量的作用,但是和全局變量不同,要好
靜態成員函數的調用
Box::volume();
A.volume();
靜態成員函數的作用就是處理靜態變量
默認情況下,靜態成員函數不能訪問本類中的其他非靜態成員
成員函數都有this指針,但是靜態成員函數沒有
友元函數?友元類
友元函數在類外定義,在類內申明,?friend void display( );
這樣該函數就可以訪問類的私有變量了
友元可以是其他類的成員函數
* (&a)=* p ??實際是a的值
內存尋址方式??void *p=&a;
常量指針??int ?*const p;
常引用?const int &ra=a;
指向常量的指針常量?const int * const p=&a;
邏輯?關系?條件???提取符和插入符??插入運算符的級別低??endl=’\n’
Cout<<oct<<a<<’+’<<b<<’=’<<c<<endl; ?八進制
順序??選擇?循環
Goto ?niu;
Niu: ?*****; ?他們在同一個函數體中
匿名對象???內聯函數
返回引用類型的函數??int & max(int &a,int &b);
CFC?命名空間using namespace ?std; ??浩強工作室 ?未名湖畔 ?清華園
類型識別(RTTL) ??虛函數
#include <iostream>
Using namespace std;?(其實就是包)
Int main()
{ ??cin>>a>>b;
???Cout<<”this is a C++\n”; ??<<插入運算符 ?cout是流對象
???也可以用printf(“****”);
??Count<<”?”<<sum<<endl; ??endl(換行) ?輸入必須空格控制輸入參數
???Return 0;
}
類和函數都是在std命名空間里的
Class student
{private:
????????****
Public:
????????*****
};
友元類?控制流setw(6)————iomanip
C++輸出輸出其實是串控制的形式
Const int ?a=2;
函數原型的申明簡單了
Sealed ??explicit ??gcnew ?nullptr ??generic ??literal ?MFC
主函數中類類型的變量就是對象??智能的語言都是大小寫敏感的C \c++
5UL無符號長整型 ?
枚舉類型變量:
Enum ?color(red,yellow,blue);
Int main()
{color ?c;
c=red;
}
E ?e是一樣的指數 ??f為單精度?e為雙精度 ?L為雙長精度
‘\0’表示空字符??\ddd=\xhh
???????????????八進制?16進制
\\表示反斜杠???“niuweiqiang”是字符串
轉移字符之前加\,就會不沖突
字符串的儲存一定是后面自動有\0
函數模板(template)
Template<typename ?T,class ?T1>;
T max(T a,T b)
Alias別名 引用(變量的別名) ?int &b=a;(b為引用變量,引的是a)
引用變量感覺有點像指針???引用比指針好
引用不能有指針變量???數組沒有引用????
內置函數(內嵌函數,內聯函數)??inline ?int max(int a,int b) ?不再進行宏定義
Const ??
作用域運算符::???::a表示訪問全局變量
#include<string>
字符串類型變量?string string1;(類名 對象)
字符數組存放字符串??strcat() ?strcmp() ?strcpy()
字符串類的對象?????字符串數組
New int(100);開辟空間,整數初值100,返回值是指針
Delete [] pt;撤銷空間
New ?delete是運算符,不是函數
條件編譯
#if ?***//表達式非0,則執行第一句
???……
#else
??……//第二句
#endif
?
?
聯編
#ifndef ?標識符
???#define ?標識符
??……
#endif ???//標識符已經被定義,則忽略,沒有被定義,則執行……
一般申明和定義分離??
Extern int a;表示變量a的作用域在幾個文件中
Static只是在本文件中
命名空間就是對象極其相關的集合,可以理解為地域區域。
Using ?namespace ?std;
命名空間是相對于頭文件而言的
命名空間里面有元素(元素就是類?函數??對象)
名空間其實就是文件管理里的,相當于C的擴展名,.h什么的
當然擴展式的作為補充可以要,當空間里沒有這種頭文件時
Using ?std::cin; ?//指定使用std的元素cin
可以自己定義命名空間
Namespace ?mingmin1
{
??Class ?niu{
……
……
};
??函數1;
??函數2;
}
using namespace ?mingmin1;
Using mingmin1::niu; //使用命名空間
包含命名空間?#include?“mingmin1.h”
#include<cstdio.h> ?//C格式變為C++格式
Abort ?assert ??exit
Void **(int ?status或void或expression) //**為這三個,終止執行
?
匿名對象??嵌套調用(調用別的函數)??遞歸調用(調用自身)??
直接遞歸??間接遞歸???堆棧
Fibonacci ??函數指針
Typedef ?Double ?(*p) (double ,double);
Typedef ??Functiontype *p;//都是定義函數指針typedef可以省略
P=max;
X=p(0.1,0.3);
函數指針還可以作為參數????函數指針還可以調用庫函數
內聯函數(內置函數)節省函數調用開銷??內置函數是簡單函數
內置函數在類外前定義
函數調用的過程其實和中斷有點像。都要用棧機制來保存現場
函數重載只是參數列表不一樣,其他的是一樣的
應用程序(項目/工程)——多個文件
自動存儲?auto(register) ?int x,y;//是默認的
全局的標識符默認為extern ???extern也表示靜態的
static的局部變量只能定義在函數體內使用 ?靜態的變量程序一執行就是都存在
標識符作用域的可見性??
文件作用域就是大的作用域(全局變量)
頭文件????文件結構
預處理指令(可以在任何位置)??預處理文件
#incude< >
#include’?‘
C++安裝的時候就把庫文件來下載了 ??盤符
可以自己寫頭文件??宏定義#define ?pi ?3.14
友元成員函數
Friend ?void ?time::diaplay(data &); ?//time類的diaplay函數為本類的成員函數
一個函數可以是多個類的友函數????可以提前引用申明類
友元類??友元關系是單向的不能傳遞的
Friend niu;
函數模板
Template<class int> ????????類模板是類的抽象
Compare<int>cmpq(3,7); ????模板類是類
在外部定義模板函數??
template<class numtype>
Numtype compare<numtype>::max( )
{return (x>y)?x:y;}
Static int niu[4]; ??//初始化的時候都為0
Const int niu[3]; ??//初始化后不變
數組的下標越界訪問是很危險的
通過指針訪問數組????數組名就是數組的首地址???MSDN
字符串變量
指針數組??int *p[3];
指向數組的指針數組??int (*p_niu[3])[ ];
指向函數的指針是可以調用函數的
Typedef int ftype( );
Ftype ??*pmax[3];
Int ??(*max[3]) ( )
Pmax[1] ( ) ?用指針調用函數數組的第一個函數
用指針訪問數組
Int *p=New int(0);
Delete p; ????//動態分配和收回內存
結構體類型的指針變量(指向結構體的指針)
結構數組
Struct People
{
Int a;
Double x;};
People niu[3]; ?//niu為結構數組
索引和順序映像?????鏈表要用到結構
josephus環問題(用到動態鏈表機制來實現)
編程的本質就是數據的組織和運行規則的制定。
類是數據類型???struct也可以定義類,但是不常用,而且一般定義的都是共有的成員
.和->效果一樣
This指針指向對象的地址(因此可以把this看做是一個自身對象) ?
this是成員函數的指針參數 ??
This指針不能顯式說明,但是可以顯式使用,而且是常指針
成員函數的參數可以是指調用自己的對象
常函數(函數的this指針指向常指針(指向常變量))
復制構造函數???Time:Time(const ?Time &p,int =1); //引用名可以為空
深復制(自定義復制函數)??淺復制(默認復制函數)
STL源碼分析 ????類是一個數據類型 ??類屬
運算符函數
Void ?Time::operator ++(int a,int b)
{
……
}
運算符其實是一個函數???運算符函數的重載可以是成員函數和友元函數
操作對象為類的時候就輝重載運算符函數??
重載函數都是了類的
流插入<< ?流提取>> ??cout ?cin為對象
類類型轉換函數???類類型的轉換
制造C++語言的這些人好厲害啊,規則是什么都記不住啊。對于語言的實踐有沒有必要深入的研究的精通。 是的,要精通,深入研究總會理解的。道理懂了之后一定要會用。
???????????????????????????????? ? 2017?? 5.19??? Lanzhou? in China