c++ 的標準輸入輸出流
c++中提供了一套輸入輸出流類的物件,它們是
cin、
cout
和cerr
,對應c
語言中的三個檔案指標
stdin
、stdout
、stderr
,分別指向終端輸入、終端輸出和標準出錯輸出(也從終端輸出)。
cin與
>>
一起完成輸入操作,
cout
、cerr
與<<
一起完成輸出與標準錯誤輸出。利用
cin和
cout比c
語言中的
scanf
和printf
要方便得多,
cin和
cout
可以自動判別輸入輸出資料型別而自動調整輸入輸出格式,不必像
scanf
和printf
那樣乙個個由使用者指定。使用
cin,
cout
不僅方便,而且減少了出錯的可能性。對於輸出來說,我們像以上方式呼叫就可以了,對於輸入來說,我們以如下方式呼叫即可:
inti;
cin>>i;
注意箭頭的方向。在輸出中我們還使用endl
(end of line),表示換行,注意最後乙個是字元『l
』,而不是數字1,
endl
相當於c
語言的'\n'
,表示輸出乙個換行。
與c不同,c++中的結構體可以包含函式;
c++中結構體和類可以通用,不同之處在於訪問控制方面:前者預設許可權為public,後者預設許可權為private。
建構函式 1
、建構函式最重要的作用是建立物件本身 。2、
c++規定,每個類必須有乙個建構函式,沒有建構函式,就不能建立任何物件。 3、
c++又規定,如果乙個類沒有提供任何的建構函式,則
c++提供乙個預設的建構函式(由
c++編譯器提供),這個預設的建構函式是乙個不帶引數的建構函式,它只負責建立物件,而不做任何的初始化工作。
4、只要乙個類定義了乙個建構函式,不管這個建構函式是否是帶引數的建構函式,
c++就不再提供預設的建構函式。也就是說,如果為乙個類定義了乙個帶引數的建構函式,還想要無引數的建構函式,則必須自己定義。
析構函式 1
、當乙個物件生命週期結束時,其所占有的記憶體空間就要被**,這個工作就由析構函式來完成。
2、析構函式是「反向
」的建構函式,析構函式不允許有返回值,更重要的是析構函式不允許帶引數,並且乙個類中只能有乙個析構函式。
3、析構函式的作用正好與建構函式相反,物件超出其作用範圍,對應的記憶體空間被系統收回或被程式用
delete
刪除時,析構函式被呼叫。
4、根據析構函式的這種特點,我們可以在建構函式中初始化物件的某些成員變數,給其分配記憶體空間(堆記憶體),在析構函式中釋放物件執行期間所申請的資源。
函式的過載
過載構成的條件:函式的引數型別、引數個數不同,才能構成函式的過載。
分析以下兩種情況,是否構成函式的過載。
第一種情況:(1)
void output();(2
)int
output(); ——— 不可以
第二種情況:(1)
void output(
inta,int
b=5);(2
)void output(
inta); —— 可以
this指標
1、this
指標是乙個隱含的指標,它是指向物件本身,代表了物件的位址
2、乙個類所有的物件呼叫的成員函式都是同一**段。那麼成員函式又是怎麼識別屬於同一物件的資料成員呢?原來,在物件呼叫
pt.output
(10,10)
時,成員函式除了接受
2個實參外,還接受到了乙個物件
s的位址。這個位址被乙個隱含的形參
this
指標所獲取,它等同於執行
this=&
pt。所有對資料成員的訪問都隱含地被加上字首
this->
。例如:
x=0;
等價於
this->x=0
。 小技巧:
在以後的
mfc程式設計中,如果在成員函式中想呼叫同類中的某個成員,可以使用
vc++
提供的自動列出成員函式功能,使用
this->
,vc++
將列出該類中的所有成員,我們可以從列表中選擇我們想呼叫的成員。
自動列出成員函式功能,可以提高編寫速度,減少拼寫錯誤。我們經常不能完全記住某個函式的完整拼寫,但卻能夠從列表中辨別出該函式,自動列出成員函式的功能在這時就顯得更加有用了。事實上,在各種
ide程式設計環境中,我們通常都不可能記住也沒有必要記住所有的函式,只要將常用的函式記住,其他不常用的函式只要記住其大概的寫法和功能,在呼叫該函式時可以從自動列出成員函式中選取,這樣可以大大節省我們的學習時間。我們不用花費大量的時間去死記硬背許多函式,利用自動列出成員函式功能和幫助系統,就能夠在程式設計時順利地使用這些函式,等用的次數多了,也就在不知不覺中完全掌握了這些函式。
類的繼承
在c++中,給我們提供了一種重要的機制,就是繼承。
理解繼承是理解物件導向程式設計的關鍵。
基類的訪問特性
類的繼承特性
(繼承方式)
子類的訪問特性
public
protected
private
public
public
protected
no access
public
protected
private
protected
protected
protected
no access
public
protected
private
private
private
private
no access
函式的覆蓋
函式的覆蓋是發生在父類與子類之間的。
型別的轉化:
fish物件記憶體布局:fish物件的this指向animal物件,多型原理
多型性 當
c++編譯器在編譯的時候,發現
animal
類的breathe()
函式是虛函式(抽象函式),這個時候
c++就會採用遲繫結(
late binding
)的技術,在執行時,依據物件的型別(在程式中,我們傳遞的
fish
類物件的位址)來確認呼叫的哪乙個函式,這種能力就做
c++的多型性。
引用和指標變數的記憶體模型
vc++程式編譯連線原理與過程
以下是部分資料:
1。定義結構體和類時。例如class point;要注意一定加上分號,結構體定義預設成員是public,而class定義預設為private
2。#include 。h>與#include "***。h"的區別:
<>不查詢執行時目錄,""查詢執行時目錄!(#include引入是原始檔,要用上using namespace ***;)
3。類的定義中,如果未指明成員型別,則預設為private。而結構體中則預設為public。
4。引用:引用經常用在函式的傳參上。另外數值交換函式也經常用引用。例
change(int &x,int &y)呼叫時即可以用 int a=3;int b=4;change(a,b);一般不用指標來作為引數進行數值交換。因為會引起歧義。
5。通常將類的定義放。h檔案,而將其實現放在cpp檔案中,別忘記了在cpp檔案中#include "***。h"
6。如何防止類的重複定義?
用#inndef point_h_h
#define point_h_h
class point{};
#endif來防止
7。原始檔cpp檔案單獨編譯成obj檔案。最後由鏈結器將與將要使用到的c++標準庫類鏈結成exe檔案,標頭檔案不參加編譯。所以在cpp檔案中別忘記了加入#include "***。h"
8。函式的覆蓋,在子類中重寫父類的函式,此時採用早期繫結的方法。如果加入了virtual,則將採用遲繫結的技術,在執行時根據物件的型別確定呼叫哪乙個函式。此遲繫結技術是mfc的類的繼承的精髓。
9。強制型別轉換。如果cfish從canimal派生而來。則可以將魚的物件轉換為canimal的物件,而反之則不行。從現實中理解也是正常的,魚可以是動物,而動物卻不是魚。再如int可以強制轉換成char型。而反之則出錯。
2020122702 掌握需求過程 2
編寫需求規格說明書是指得到要構建的產品的完整描述的任務。在需求分析的過程中,要把我們的每一步記錄下來,這並不是簡簡單單的寫報告而已,而是發現問題,理清自己思路的乙個很好的方式。需求產品說明書的完整是乙個開發軟體的必備條件,它必須包含清晰 完整 可測試的指令,說明必須構建什麼,清楚自己的目標。所以編寫...
Lesson2 掌握C 基本語法
1.c 主要特點 封裝性 encapsulation 把資料與運算元據的函式組織在一起,使程式結構更加緊湊,提高類內部資料的安全性。繼承性 inheritance 增加了軟體的可擴充性及 重用性 多型性 polymorphism 使設計人員在設計程式時可以對問題進行更好的抽象,有利於 的維護和可重用...
03 掌握 NSThread基本使用
特點 開啟執行緒需要手動開啟執行緒 呼叫start方法 可以拿到執行緒物件進行詳細設定 第乙個引數 目標物件 第二個引數 選擇器,執行緒啟動要呼叫哪個方法 第三個引數 前面方法要接收的引數 最多只能接收乙個引數,沒有則傳nil let thread nsthread.init target self...