C++入門概覽和嘗試創(chuàng)建第一個C++程序
C++程序的構(gòu)成和書寫形式
1) 一個C++程序可以由一個程序單位或多個程序單位構(gòu)成。每一個程序單位作為一個文件。在程序編譯時,編譯系統(tǒng)分別對各個文件進(jìn)行編譯,因此,一個文件是一個編譯單元。
2) 在一個程序單位中,可以包括以下幾個部分:
預(yù)處理命令。上節(jié)4個程序中都包括#include命令。
全局聲明部分(在函數(shù)外的聲明部分)。在這部分中包括對用戶自己定義的數(shù)據(jù)類型的聲明和程序中所用到的變量的定義。
函數(shù)。函數(shù)是實(shí)現(xiàn)操作的部分,因此函數(shù)是程序中必須有的和最基本的組成部分。每一個程序必須包括一個或多個函數(shù),其中必須有一個(而且只能有一個)主函數(shù)(main函數(shù))。
但是并不要求每一個程序文件都必須具有以上3個部分,可以缺少某些部分(包括函數(shù))。
3) 一個函數(shù)由兩部分組成:
函數(shù)首部,即函數(shù)的第一行。包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形參)名、參數(shù)類型。注:一個函數(shù)名后面必須跟一對圓括號, 函數(shù)參數(shù)可以缺省,如int main( )。
函數(shù)體,即函數(shù)首部下面的大括號內(nèi)的部分。如果在一個函數(shù)中有多個大括號,則最外層的一對{ }為函數(shù)體的范圍。
函數(shù)體一般包括:
局部聲明部分 (在函數(shù)內(nèi)的聲明部分)。包括對本函數(shù)中所用到的類型、函數(shù)的聲明和變量的定義。注:對數(shù)據(jù)的聲明既可以放在函數(shù)之外(其作用范圍是全局的),也可以放在函數(shù)內(nèi)(其作用范圍是局部的,只在本函數(shù)內(nèi)有效)。
執(zhí)行部分。由若干個執(zhí)行語句組成,用來進(jìn)行有關(guān)的操作,以實(shí)現(xiàn)函數(shù)的功能。
4) 語句包括兩類:一類是聲明語句,另一類是執(zhí)行語句。 C++對每一種語句賦予一種特定的功能。語句是實(shí)現(xiàn)操作的基本成分,顯然,沒有語句的函數(shù)是沒有意義的。C++語句必須以分號結(jié)束。
5) 一個C++程序總是從main函數(shù)開始執(zhí)行的,而不論main函數(shù)在整個程序中的位置如何。
6) 類(class)是C++新增加的重要的數(shù)據(jù)類型,是C++對C的最重要的發(fā)展。有了類,就可以實(shí)現(xiàn)面向?qū)ο蟪绦蛟O(shè)計方法中的封裝、信息隱蔽、繼承、派生、多態(tài)等功能。在一個類中可以包括數(shù)據(jù)成員和成員函數(shù),他們可以被指定為私有的(private)和公用的(public)屬性。私有的數(shù)據(jù)成員和成員函數(shù)只能被本類的成員函數(shù)所調(diào)用。
7) C++程序書寫格式自由,一行內(nèi)可以寫幾個語句, 一個語句可以分寫在多行上。C++程序沒有行號,也不像FORTRAN或COBOL那樣嚴(yán)格規(guī)定書寫格式(語句必須從某一列開始書寫)。
8) 一個好的、有使用價值的源程序都應(yīng)當(dāng)加上必要的注釋,以增加程序的可讀性。C++還保留了C語言的注釋形式,可以用“/*……*/”對C++程序中的任何部分作注釋。在“/*”和“*/”之間的全部內(nèi)容作為注釋。
用“//”作注釋時,有效范圍只有一行,即本行有效,不能跨行。而用“/*……*/”作注釋時有效范圍為多行。只要在開始處有一個“/*”,在最后一行結(jié)束處有一個“*/”即可。因此,一般習(xí)慣是: 內(nèi)容較少的簡單注釋常用“//”,內(nèi)容較長的常用“/*……*/ ”。
第一個C++程序
例1
#include <iostream> //包含頭文件iostream using namespace std; //使用命名空間std int main( ) { cout<<"This is a C++ program."; return 0; }
在運(yùn)行時會在屏幕上輸出以下一行信息:
This is a C++ program.
用main代表“主函數(shù)”的名字。每一個C++程序都必須有一個 main 函數(shù)。main前面的int的作用是聲明函數(shù)的類型為整型。程序第6行的作用是向操作系統(tǒng)返回一個零值。如果程序不能正常執(zhí)行,則會自動向操作系統(tǒng)返回一個非零值,一般為-1。
函數(shù)體是由大括號{ }括起來的。本例中主函數(shù)內(nèi)只有一個以cout開頭的語句。注意C++所有語句最后都應(yīng)當(dāng)有一個分號。
再看程序的第1行“#include <iostream>”,這不是C++的語句,而是C++的一個預(yù)處理命令,它以“#”開頭以與C++語句相區(qū)別,行的末尾沒有分號。#include <iostream>是一個“包含命令”,它的作用是將文件iostream的內(nèi)容包含到該命令所在的程序文件中,代替該命令行。文件iostream的作用是向程序提供輸入或輸出時所需要的一些信息。iostream是i-o-stream 3個詞的組合,從它的形式就可以知道它代表“輸入輸出流”的意思,由于這類文件都放在程序單元的開頭,所以稱為“頭文件”(head file)。在程序進(jìn)行編譯時,先對所有的預(yù)處理命令進(jìn)行處理,將頭文件的具體內(nèi)容代替 #include命令行,然后再對該程序單元進(jìn)行整體編譯。
程序的第2行“using namespace std; ” 的意思是“使用命名空間std”。C++標(biāo)準(zhǔn)庫中的類和函數(shù)是在命名空間std中聲明的,因此程序中如果需要用到C++標(biāo)準(zhǔn)庫(此時就需要用#include命令行),就需要用“using namespace std; ”作聲明,表示要用到命名空間std中的內(nèi)容。
在初學(xué)C++時,對本程序中的第1, 2行可以不必深究,只需知道:如果程序有輸入或輸出時,必須使用“#include <iostream>”命令以提供必要的信息,同時要用“using namespace std;” ,使程序能夠使用這些信息,否則程序編譯時將出錯。
例2
求a和b兩個數(shù)之和??梢詫懗鲆韵鲁绦颍?br />
// 求兩數(shù)之和 (本行是注釋行) #include <iostream> //預(yù)處理命令 using namespace std; //使用命名空間std int main( ) //主函數(shù)首部 { //函數(shù)體開始 int a, b, sum; //定義變量 cin>>a>>b; //輸入語句 sum=a+b; //賦值語句 cout<<"a+b="<<sum<<endl; //輸出語句 return 0; //如程序正常結(jié)束,向操作系統(tǒng)返回一個零值 } //函數(shù)結(jié)束
本程序的作用是求兩個整數(shù)a和b之和sum。第1行“//求兩數(shù)之和”是一個注釋行,C++規(guī)定在一行中如果出現(xiàn)“//”,則從它開始到本行末尾之間的全部內(nèi)容都作為注釋。
如果在運(yùn)行時從鍵盤輸入
123 456↙
則輸出為
a+b=579
例3
給兩個數(shù)x和y,求兩數(shù)中的大者。在本例中包含兩個函數(shù)。
#include <iostream> //預(yù)處理命令 using namespace std; int max(int x,int y) //定義max函數(shù),函數(shù)值為整型,形式參數(shù)x,y為整型 { //max函數(shù)體開始 int z; //變量聲明,定義本函數(shù)中用到的變量z為整型 if(x>y) z=x; //if語句,如果x>y,則將x的值賦給z else z=y; //否則,將y的值賦給z return(z); //將z的值返回,通過max帶回調(diào)用處 } //max函數(shù)結(jié)束 int main( ) //主函數(shù) { //主函數(shù)體開始 int a,b,m; //變量聲明 cin>>a>>b; //輸入變量a和b的值 m=max(a,b); //調(diào)用max函數(shù),將得到的值賦給m cout<<"max="<<m<<'\n'; //輸出大數(shù)m的值 return 0; //如程序正常結(jié)束,向操作系統(tǒng)返回一個零值 } //主函數(shù)結(jié)束
本程序包括兩個函數(shù):主函數(shù)main和被調(diào)用的函數(shù)max。程序運(yùn)行情況如下:
18 25 ↙ (輸入18和25給a和b) max=25 (輸出m的值)
注意輸入的兩個數(shù)據(jù)間用一個或多個空格間隔,不能以逗號或其他符號間隔。
在上面的程序中,max函數(shù)出現(xiàn)在main函數(shù)之前,因此在main函數(shù)中調(diào)用max函數(shù)時,編譯系統(tǒng)能識別max是已定義的函數(shù)名。如果把兩個函數(shù)的位置對換一下,即先寫main函數(shù),后寫max函數(shù),這時在編譯main函數(shù)遇到max時,編譯系統(tǒng)無法知道m(xù)ax代表什么含義,因而無法編譯,按出錯處理。
為了解決這個問題,在主函數(shù)中需要對被調(diào)用函數(shù)作聲明。上面的程序可以改寫如下:
#include <iostream> using namespace std; int main( ) { int max(int x,int y); //對max函數(shù)作聲明 int a,b,c; cin>>a>>b; c=max(a,b); //調(diào)用max函數(shù) cout<<"max="<<c<<endl; return 0; } int max(int x,int y) //定義max函數(shù) { int z; if(x>y) z=x; else z=y; return(z); }
只要在被調(diào)用函數(shù)的首部的末尾加一個分號,就成為對該函數(shù)的函數(shù)聲明。函數(shù)聲明的位置應(yīng)當(dāng)在函數(shù)調(diào)用之前。
下面舉一個包含類(class)和對象(object)的C++程序,目的是使讀者初步了解C++是怎樣體現(xiàn)面向?qū)ο蟪绦蛟O(shè)計方法的。
例4
包含類的C++程序。
#include <iostream>// 預(yù)處理命令 using namespace std; class Student// 聲明一個類,類名為Student { private: // 以下為類中的私有部分 int num; // 私有變量num int score; // 私有變量score public: // 以下為類中的公用部分 void setdata( ) // 定義公用函數(shù)setdata { cin>>num; // 輸入num的值 cin>>score; // 輸入score的值 } void display( ) // 定義公用函數(shù)display { cout<<"num="<<num<<endl; // 輸出num的值 cout<<"score="<<score<<endl;//輸出score的值 }; }; // 類的聲明結(jié)束 Student stud1,stud2; //定義stud1和stud2為Student類的變量,稱為對象 int main( )// 主函數(shù)首部 { stud1.setdata( ); // 調(diào)用對象stud1的setdata函數(shù) stud2.setdata( ); // 調(diào)用對象stud2的setdata函數(shù) stud1.display( ); // 調(diào)用對象stud1的display函數(shù) stud2.display( ); // 調(diào)用對象stud2的display函數(shù) return 0; }
在一個類中包含兩種成員:數(shù)據(jù)和函數(shù),分別稱為數(shù)據(jù)成員和成員函數(shù)。在C++中把一組數(shù)據(jù)和有權(quán)調(diào)用這些數(shù)據(jù)的函數(shù)封裝在一起,組成一種稱為“類(class)”的數(shù)據(jù)結(jié)構(gòu)。在上面的程序中,數(shù)據(jù)成員num,score和成員函數(shù)setdata,display組成了一個名為Student的“類”類型。成員函數(shù)是用來對數(shù)據(jù)成員進(jìn)行操作的。也就是說,一個類是由一批數(shù)據(jù)以及對其操作的函數(shù)組成的。
類可以體現(xiàn)數(shù)據(jù)的封裝性和信息隱蔽。在上面的程序中,在聲明Student類時,把類中的數(shù)據(jù)和函數(shù)分為兩大類:private(私有的)和public(公用的)。把全部數(shù)據(jù)(num,score)指定為私有的,把全部函數(shù)(setdata,display)指定為公用的。在大多數(shù)情況下,會把所有數(shù)據(jù)指定為私有,以實(shí)現(xiàn)信息隱蔽。
具有“類”類型特征的變量稱為“對象”(object)。
程序中第18~24行是主函數(shù)。
程序運(yùn)行情況如下:
1001 98.5 ↙ (輸入學(xué)生1的學(xué)號和成績) 1002 76.5 ↙ (輸入學(xué)生2的學(xué)號和成績) num=1001 (輸出學(xué)生1的學(xué)號) score=98.5 (輸出學(xué)生1的成績) num=1002 (輸出學(xué)生2的學(xué)號) score=76.5 (輸出學(xué)生2的成績)
相關(guān)文章
C語言實(shí)現(xiàn)系統(tǒng)關(guān)機(jī)注銷功能
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)系統(tǒng)關(guān)機(jī)注銷功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-02-02詳解C++中String類模擬實(shí)現(xiàn)以及深拷貝淺拷貝
這篇文章主要介紹了詳解C++中String類模擬實(shí)現(xiàn)以及深拷貝淺拷貝的相關(guān)資料,希望通過本文能幫助到大家,讓大家實(shí)現(xiàn)這樣的方法,需要的朋友可以參考下2017-10-10解決了個困擾了2天的問題,定點(diǎn)運(yùn)算問題
本文主要講解定點(diǎn)運(yùn)算問題,需要的朋友可以參考一下。2016-06-06