找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2351|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

VC++基本概念

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:105323 發(fā)表于 2016-2-12 18:58 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
本帖最后由 51黑黑黑 于 2016-2-12 19:01 編輯

  類是具體對(duì)象(實(shí)例)的抽象。那么究竟如何抽象?就是把一個(gè)實(shí)例的特征提取出來,比如,水果是一個(gè)類,蘋果是水果的一個(gè)實(shí)例,蘋果有蘋果的特征,其他水果有其他水果的特征,比如香蕉。我們只要從蘋果香蕉中把特征提取出來進(jìn)行統(tǒng)一管理就可以,這樣就形成了水果類classFruits()。然后“Fruites apple”,表示蘋果是水果的一個(gè)實(shí)例。就像人如果是一個(gè)類的話,我們每一個(gè)人都是這個(gè)類的實(shí)例。  構(gòu)造函數(shù)最重要的作用是創(chuàng)建對(duì)象本身。C++規(guī)定,每個(gè)類必須有一個(gè)構(gòu)造函數(shù),沒有構(gòu)造函數(shù),就不能創(chuàng)建任何對(duì)象。 C++又規(guī)定,如果一個(gè)類沒有提供任何的構(gòu)造函數(shù),則C++提供一個(gè)默認(rèn)的構(gòu)造函數(shù)(由C++編譯器提供),這個(gè)默認(rèn)的構(gòu)造函數(shù)是一個(gè)不帶參數(shù)的構(gòu)造函數(shù),它只負(fù)責(zé)創(chuàng)建對(duì)象,而不做任何的初始化工作。只要一個(gè)類定義了一個(gè)構(gòu)造函數(shù),不管這個(gè)構(gòu)造函數(shù)是否是帶參數(shù)的構(gòu)造函數(shù),C++就不再提供默認(rèn)的構(gòu)造函數(shù)。也就是說,如果為一個(gè)類定義了一個(gè)帶參數(shù)的構(gòu)造函數(shù),還想要無參數(shù)的構(gòu)造函數(shù),則必須自己定義。
  當(dāng)一個(gè)對(duì)象生命周期結(jié)束時(shí),其所占有的內(nèi)存空間就要被回收,這個(gè)工作就由析構(gòu)函數(shù)來完成。 析構(gòu)函數(shù)是“反向”的構(gòu)造函數(shù),析構(gòu)函數(shù)不允許有返回值,更重要的是析構(gòu)函數(shù)不允許帶參數(shù),并且一個(gè)類中只能有一個(gè)析構(gòu)函數(shù)。析構(gòu)函數(shù)的作用正好與構(gòu)造函數(shù)相反,對(duì)象超出其作用范圍,對(duì)應(yīng)的內(nèi)存空間被系統(tǒng)收回或被程序用delete刪除時(shí),析構(gòu)函數(shù)被調(diào)用。 根據(jù)析構(gòu)函數(shù)的這種特點(diǎn),我們可以在構(gòu)造函數(shù)中初始化對(duì)象的某些成員變量,給其分配內(nèi)存空間(堆內(nèi)存),在析構(gòu)函數(shù)中釋放對(duì)象運(yùn)行期間所申請(qǐng)的資源。
  如圖所示,CTextView類中的構(gòu)造函數(shù)是CTextView(),析構(gòu)函數(shù)為~CTextView()。

 重載函數(shù)是函數(shù)的一種特殊情況,為方便使用,C++允許在同一范圍中聲明幾個(gè)功能類似的函數(shù)同名,但是這些同名函數(shù)的形式參數(shù)(指參數(shù)的個(gè)數(shù)、類型或者順序)必須不同,也就是說用同一個(gè)運(yùn)算符完成不同的運(yùn)算功能。這就是重載函數(shù)。重載函數(shù)常用來實(shí)現(xiàn)功能類似而所處理的數(shù)據(jù)類型不同的問題。
兩個(gè)重載函數(shù)必須在下列一個(gè)或兩個(gè)方面有所區(qū)別:
1.、函數(shù)有不同參數(shù)。
2、函數(shù)有不同參數(shù)類型,
第一種情況,假設(shè)一個(gè)對(duì)象為cc,那么cc調(diào)用兩個(gè)函數(shù)都為cc.output(),編譯器無法分辨是哪一種,所以不能構(gòu)成重載;第二種情況,由于b已經(jīng)被設(shè)為缺省值5,而且另一個(gè)參數(shù)相同,所以也不能構(gòu)成重載。

VC++(一)標(biāo)準(zhǔn)輸入輸出
VC++6.0標(biāo)準(zhǔn)輸入輸出流庫函數(shù)iostream常用的輸入和輸出函數(shù)為cin和cout,下面用一個(gè)簡單的例程來說明

#include <iostream.h>
int main()
{
cout<<"Enter twonumbers:"<<endl;
int v1,v2;
cin>>v1>>v2;
cout<<"The sum of"<<v1<<"+"<<v2<<"="<<v1+v2<<endl;
return 0;
}

cout后面跟左書名號(hào),代表輸出
endl表示換行
cin后面跟右書名號(hào),代表輸入

VC++(二)MFC AppWizard初步

首先建立一個(gè)MFC AppWizard工程,工程名Test如下圖所示




                                                     

  建立完成后,會(huì)出現(xiàn)如上圖所示的視圖,在類視圖中CMainFrame的名字是不會(huì)變的,而APP、Doc、View是以C+工程名+類的方式出現(xiàn)的?梢钥吹,在上面工程中并未找到入口函數(shù)WinMain,其實(shí)它的位置在安裝目錄下VC98\MFC\SRC里面的APPMODUL.CPP中,如下圖所示:

  事實(shí)上,_tWinMain是個(gè)宏,直接右鍵轉(zhuǎn)到定義出就會(huì)發(fā)現(xiàn)#define_tWinMain  WinMain這樣一個(gè)宏定義。我們?cè)赺tWinMain函數(shù)這里設(shè)置一個(gè)斷點(diǎn)并調(diào)試運(yùn)行,就會(huì)發(fā)現(xiàn)程序確實(shí)在這里停了,說明進(jìn)入了這個(gè)函數(shù)。

  接下來一個(gè)比較重要的問題是全局對(duì)象CTestApp

  CTestApp是從CWinApp派生出來的一個(gè)類,而theApp是CTestApp實(shí)例化的一個(gè)對(duì)象,它唯一地表示應(yīng)用程序本身。CTestApp()導(dǎo)致CWinApp::CWinApp(LPCTSTRlpszAppName)的調(diào)用,這個(gè)函數(shù)主要做程序運(yùn)行前的初始化工作。


VC++(三)指向指針的指針如下例所示
#include "iostream.h"

int ival=1024;
int *pi=&ival;
int **ppi=π
int a[5]={3,8,7,6,5};
int *pa=a;
const size_t arr_sz=5;

int main()
{
cout<<"ival is"<<ival<<"\n"
<<"&ival is"<<&ival<<"\n"
<<"*pi is"<<*pi<<"\n"
<<"pi is"<<pi<<"\n"
<<"**ppiis"<<**ppi<<"\n"
<<"*ppiis"<<*ppi<<"\n"
<<"ppiis"<<ppi<<"\n"
<<"ais"<<a<<"\n"
       <<"pais"<<pa<<"\n"
<<"*pais"<<*pa<<"\n";
pa=&a[2];
cout<<"pais"<<pa<<"\n"
<<"*pais"<<*pa<<"\n";
pa=a+1;
cout<<"pais"<<pa<<"\n"
<<"*pais"<<*pa<<"\n";

for(int *pbegin=a,*pend=pbegin+arr_sz; pbegin!=pend;++pbegin)
{
cout<<pbegin<<""
  <<*pbegin<<"\n";
}
return 0;



運(yùn)行結(jié)果如下圖所示




顯然指針變量pi保存的是變量ival的地址,ppi實(shí)際上保存的是pi的地址,那么*ppi就是pi的值(即ival的地址),**ppi就是ival的值。

而指向數(shù)組的指針pa=a+1后,實(shí)際上指向了下一個(gè)元素
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表