第一篇:C++常用填空題
一、單項(xiàng)選擇題(共20題,每題1分,共20分)
6、對(duì)重載函數(shù)形參的描述中,錯(cuò)誤的是 D
A.參數(shù)的個(gè)數(shù)可能不同
B.參數(shù)的類型可能不同
C.參數(shù)的順序可能不同
D.參數(shù)的個(gè)數(shù)、類型、順序都相同,只是函數(shù)的返回值類型不同
9、通常的拷貝構(gòu)造函數(shù)的參數(shù)是
A. 某個(gè)對(duì)象名 B.某個(gè)對(duì)象成員名
C. 某個(gè)對(duì)象的引用 D.某個(gè)對(duì)象的指針名
10、關(guān)于構(gòu)造函數(shù)特點(diǎn)的描述中,錯(cuò)誤的是
A.定義構(gòu)造函數(shù)必須指出類型
B.構(gòu)造函數(shù)的名字與該類的類名相同
C.一個(gè)類中可定義0至多個(gè)構(gòu)造函數(shù)
D.構(gòu)造函數(shù)是一種成員函數(shù)
12、關(guān)于常成員的描述中,錯(cuò)誤的是
A.常成員包含常數(shù)據(jù)成員和常成員函數(shù)兩種
B.常數(shù)據(jù)成員必須是公有的C.常數(shù)據(jù)成員要使用構(gòu)造函數(shù)成員初始化列表進(jìn)行初始化
D.常對(duì)象只能調(diào)用它的常成員函數(shù),不能調(diào)用其它的成員函數(shù)
13、關(guān)于友元函數(shù)的描述中,錯(cuò)誤的是
A.友元函數(shù)不是成員函數(shù)
B.友元函數(shù)只能訪問(wèn)類中私有成員
C.友元函數(shù)破壞隱藏性,盡量少用
D.友元函數(shù)說(shuō)明在類體內(nèi),使用關(guān)鍵字friend18、能夠釋放對(duì)象所占資源的是(析構(gòu)函數(shù))
二、填空題(共9題16空,每空1分,共16分)
1、函數(shù)重載時(shí),編譯系統(tǒng)會(huì)根據(jù)_形參的類型或形參的個(gè)數(shù) 來(lái)區(qū)分。
3、若希望用一個(gè)已有對(duì)象來(lái)構(gòu)造另一個(gè)同類型的對(duì)象,可以使用拷貝構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)。
4、靜態(tài)成員屬于類,而不屬于任何一個(gè)對(duì)象,它被同一個(gè)類的所有對(duì)象共享。
5、類的繼承方式有私有 繼承、公有 繼承和保護(hù)繼承。
6、重載運(yùn)算符的含義必須清楚,不能有二義性。
7、按照聯(lián)編進(jìn)行階段的不同,聯(lián)編方法可分為兩種: 動(dòng)態(tài)聯(lián)編 和靜態(tài)聯(lián)編。
8、當(dāng)基類中的某個(gè)成員函數(shù)被聲明為虛函數(shù)后,此虛函數(shù)就可以在一個(gè)或多個(gè)派生類中被重新定義,在派生類中重新定義時(shí),其函數(shù)原型,包括返回類型、參數(shù)名、函數(shù)個(gè)數(shù)、參數(shù)類型以及參數(shù)的順序都必須與基類中的原型完全相同。
1.在類中必須聲明成員函數(shù)的原型,成員函數(shù)的實(shí)現(xiàn)部分可以寫(xiě)在類外。
2.如果需要在被調(diào)函數(shù)運(yùn)行期間,改變主調(diào)函數(shù)中實(shí)參變量的值,則函數(shù)的形參應(yīng)該是引用類型或指針類型。
3.抽象類只能作為基類使用,而不能聲明它的對(duì)象。
4.進(jìn)行函數(shù)重載時(shí),被重載的同名函數(shù)如果都沒(méi)有用const修飾,則它們的形參個(gè)數(shù)或類型必須不同。
5.通過(guò)一個(gè)常對(duì)象只能調(diào)用它的常成員函數(shù),不能調(diào)用其他成員函數(shù)。
6.函數(shù)的遞歸調(diào)用是指函數(shù)直接或間接地調(diào)用自身。
7.拷貝構(gòu)造函數(shù)的形參必須是本類對(duì)象的引用。
第二篇:C++實(shí)驗(yàn)
上機(jī)實(shí)驗(yàn):
1、回文是指正讀,反讀均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,試用STACK類編寫(xiě)該程序。
#include
int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位對(duì)原始數(shù)組的檢測(cè)索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];}
//將原始數(shù)組的一半元素入棧 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //從棧頂開(kāi)始依次匹配
while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文數(shù) free(cMyStack);return 1;} else {//不是回文數(shù)
free(cMyStack);return 0;} } 運(yùn)行結(jié)果:
2.利用兩個(gè)棧類S1、S2模擬一個(gè)隊(duì)列時(shí),編寫(xiě)一程序利用棧的運(yùn)算實(shí)現(xiàn)隊(duì)列的插入、刪除以及判斷隊(duì)列空的運(yùn)算。
#include
template
assert(!mStack2.empty());mStack2.pop();} template
sq.pushBack(1);printQueue(sq);sq.pushBack(2);printQueue(sq);sq.pushBack(3);printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);sq.popFront();printQueue(sq);return 0;} 運(yùn)行結(jié)果:
實(shí)驗(yàn)2:
聲明復(fù)數(shù)的類Complex,使用友元函數(shù)add實(shí)現(xiàn)復(fù)數(shù)的加法。
#include < iostream > using namespace std;
class Complex { private:
double real, image;public :
Complex(){}
Complex(double a,double b)
{
real = a;image = b;}
void setRI(double a, double b){
real = a;image = b;} double getReal(){ return real;}
double getImage(){ return image;} void print(){ if(image>0)
cout<<“復(fù)數(shù):”<< real <<“ + ”<< image <<“i”<< endl;if(image<0)
cout<<“復(fù)數(shù):”<< real <<“-”<< image <<“i”<< endl;}
friend Complex add(Complex ,Complex);//聲明友元函數(shù) };
Complex add(Complex c1, Complex c2)//定義友元函數(shù)
{
Complex c3;
c3.real = c1.real + c2.real;//訪問(wèn)Complex類中的私有成員
c3.image = c1.image + c2.image;return c3;}
void main(){
Complex c1(29, 0.634), c2, c3;c2.setRI(85,106.012);c3 = add(c1, c2);
cout<<“復(fù)數(shù)一:”;c1.print();cout<<“復(fù)數(shù)二:”;c2.print();cout<<“相加后:”;c3.print();}
結(jié)果:
實(shí)驗(yàn)三:
7-5 定義一個(gè)基類Shape,在此基礎(chǔ)上派生出一個(gè)Rectangle和Circle,二者都有g(shù)etArea()函數(shù)計(jì)算對(duì)象的面積。使用Rectangle類創(chuàng)建一個(gè)派生類Square.#include
public: Shape(){}
double GetArea()
{
return 0.1;}
};class Rectangle: public Shape {
public:
Rectangle(double w,double h)
{
width=w;height=h;}
double GetArea(){
return width*height;}
private: double width,height;};class Circle:public Shape { private: double r;
public: Circle(double rr){ r=rr;}
double GetArea(){
return PI*r*r;} };
int main(){
Rectangle * rec=new Rectangle(5,6);
Circle * cir=new Circle(5);
cout<<“RecArea:”< cout<<“CirArea:”< return 1; } 運(yùn)行結(jié)果: 7-10.定義一個(gè)Object類,有數(shù)據(jù)成員weight及相應(yīng)的操作函數(shù),由此派生出Box類,增加數(shù)據(jù)成員height和width及相應(yīng)的操作函數(shù),聲明一個(gè)Box對(duì)象,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用順序。#include object(){ cout<<“構(gòu)造object對(duì)象”< class box:public object { private: int Height,Width;public: box(){ cout<<“構(gòu)造box對(duì)象”< 姓名:XX 學(xué)院:XXX 班級(jí):XXX 學(xué)號(hào):XXX i++; } while(i<=10);cout<<“sum=”< #include for(i;i<=10,i++) { sum+=i; } cout<<“sum=”< cout<<“不是合法的輸入”< 實(shí)驗(yàn) 三、函數(shù)的應(yīng)用(2學(xué)時(shí)) 1、實(shí)驗(yàn)?zāi)康模?/p> 掌握函數(shù)的定義和調(diào)用方法。練習(xí)重載函數(shù)使用。練習(xí)函數(shù)模板的使用 練習(xí)使用系統(tǒng)函數(shù)。 在main()函數(shù)中提示輸入兩個(gè)整數(shù)x,y,使用cin語(yǔ)句得到x,y的值,調(diào)用pow(x,y)函數(shù)計(jì)算x的y次冪的結(jié)果,再顯示出來(lái)。程序名:lab3_4.cpp。 編寫(xiě)遞歸函數(shù)int fib(int n),在主程序中輸入n的值,調(diào)用fib函數(shù)計(jì)算Fibonacci級(jí)數(shù)。公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if語(yǔ)句判斷函數(shù)的出口,在程序中用cout語(yǔ)句輸出提示信息。程序名:lab3_5.cpp。 7)調(diào)試操作步驟如下: 選擇菜單命令Build|Start Debug |Step In,系統(tǒng)進(jìn)入單步執(zhí)行狀態(tài),程序開(kāi)始運(yùn)行,并出現(xiàn)一個(gè)DOS窗口,此時(shí)光標(biāo)停在main()函數(shù)的入口處。 把光標(biāo)移到語(yǔ)句answer=fib(n)前,從Debug菜單單擊Run To Cursor,在程序運(yùn)行的DOS窗口中按提示輸入數(shù)字10,這時(shí)回到可視界面中,光標(biāo)停在第11行,觀察一下n的值。 從Debug菜單中單擊Step Into,程序進(jìn)入fib函數(shù),觀察一下n的值,把光標(biāo)移到語(yǔ)句return(fib(n-2)+fib(n-1))前,從Debug菜單單擊Run to Cursor,再單擊Step Into,程序遞歸調(diào)用fib函數(shù),又進(jìn)入fib函數(shù),觀察n的值。 繼續(xù)執(zhí)行程序,參照上述的方法,觀察程序的執(zhí)行順序,加深對(duì)函數(shù)調(diào)用和遞歸調(diào)用的理解。 再試試Debug菜單欄中的別的菜單項(xiàng),熟悉Debug的各種方法。 4、實(shí)驗(yàn)原理 C++中函數(shù)的重載使得同樣的函數(shù)名下,只要參數(shù)類型、數(shù)目不同時(shí),即可根據(jù)輸入的數(shù)據(jù)進(jìn)行相應(yīng)的函數(shù)調(diào)用,使用起來(lái)簡(jiǎn)單方便。 5、思考與體會(huì) C++中,函數(shù)的運(yùn)用與之前學(xué)過(guò)的C語(yǔ)言既有相同之處,也有著不同的地方。相同的地方在于格式、用法等框架上的不變。但是C語(yǔ)言中對(duì)于同樣的函數(shù)名是只能夠申明一種函數(shù)的,倘若有相同的函數(shù)名出現(xiàn)系統(tǒng)即會(huì)報(bào)錯(cuò),所以用起來(lái)有時(shí)是極為不便 0 //參數(shù)為兩個(gè)雙精度浮點(diǎn)形的函數(shù) int max1(double a,double b){ a=a>b?a:b;return a;} //參數(shù)為三個(gè)雙精度浮點(diǎn)形的函數(shù) int max1(double a,double b,double c){ a=a>b?a:b;a=a>c?a:c;return a;} void main(void){ int a;double b;a=max1(1,2);cout< Lab3_3: #include int main(){ int i,j,k;cout<<“請(qǐng)輸入要比較的3個(gè)數(shù): ”< 2131415 public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){ //構(gòu)造函數(shù) cout<<“構(gòu)造了一個(gè)CPU”< rank=r; frequency=f; voltage=v;} void run(){ cout<<“CPU開(kāi)始運(yùn)行”< } void stop(){ cout<<“CPU停止運(yùn)行”< cout<<“RANK=”< cout<<“frequency=”< cout<<“voltage=”< }; int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;} Lab4_2 #include //析構(gòu)函數(shù)-17 computer(Rank r,int f,float v){ CPU cpu(r,f,v); //定義CPU對(duì)象 RAM ram(1); //定義RAM對(duì)象 CDROM cdrom(1); //定義CDROM對(duì)象 cpu.run(); cpu.show(); cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;} 實(shí)驗(yàn) 七、繼承與派生(一、二)4學(xué)時(shí) 1、實(shí)驗(yàn)?zāi)康模?/p> 學(xué)習(xí)定義和使用類的繼承關(guān)系,定義派生類。熟悉不同繼承方式下對(duì)基類成員的訪問(wèn)控制。學(xué)習(xí)利用虛基類解決二義性問(wèn)題 2、實(shí)驗(yàn)任務(wù) a)定義一個(gè)基類Animal,有私有整型成員變量age,構(gòu)造其派生類dog,在其成員函數(shù)SetAge(int n)中直接給age賦值,看看會(huì)有什么問(wèn)題,把a(bǔ)ge改為公有成員變量,還會(huì)有問(wèn)題嗎?編程試試看。b)定義一個(gè)基類BaseClass,有整型成員變量Number ,構(gòu)造其派生類DerivedClass,觀察構(gòu)造函數(shù)和析構(gòu)函數(shù)的執(zhí)行情況。c)定義一個(gè)車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車類有高度(height)等屬性,汽車類有座位數(shù)(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過(guò)程中,注意把vehicle設(shè)置為虛基類。如果不把vehicle設(shè)置為虛基類,會(huì)有什么問(wèn)題?編程試試看。 3、實(shí)驗(yàn)步驟 編寫(xiě)程序定義基類Animal,成員變量age定義為私有的。構(gòu)造派生類dog,在其成員函數(shù)SetAge(int n)中直接對(duì)age賦值時(shí),會(huì)出現(xiàn)類似以下的錯(cuò)誤提示: error C2248:’age’:cannot access private member declared in class ‘Animal’ error C2248:’age’:cannot access private member declared in class ‘Animal’ 把a(bǔ)ge改為公有成員變量后重新編譯就可以了。程序名為:lab7_1.cpp 0 確方便我們編程。 6、部分參考代碼 Lab7_1 #include class Animal{ public: int age;}; class dog:public Animal{ public: int SetAge(int n){ age=n; return age;} }; void main(void){ int age;dog d;age=d.SetAge(3);cout<<“age=”< Lab7_2 #include cout<<“這是父類的構(gòu)造函數(shù)”< cout<<“這是父類的析構(gòu)函數(shù)”< //Motorcycle繼承bicycle和motorcar類 class motorcycle:public bicycle,public motorcar{ public: motorcycle(int seat,double H,double MS,double W){ SeatNum=seat; height=H; MaxSpeed=MS; Weight=W;} void show(){ cout<<“seatnum=”< cout<<“height=”< cout<<“MaxSpeed=”< cout<<“weight=”< int main(){ motorcycle che(3,30.33,90.84,500);che.show();return 0;} 實(shí)驗(yàn) 八、多態(tài)性2學(xué)時(shí) 1、實(shí)驗(yàn)?zāi)康模?/p> 掌握運(yùn)算符重載的方法 習(xí)使用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性。 2、實(shí)驗(yàn)任務(wù) a)定義Point類,有坐標(biāo)x,y兩個(gè)成員變量;對(duì)Point類重載“++”、“--”運(yùn)算符,實(shí)現(xiàn)對(duì)坐標(biāo)值的改變。 定義一個(gè)車(vehicle)基類,有Run、Stop等成員函數(shù),由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數(shù)。觀察虛函的作用。 3、實(shí)驗(yàn)步驟 編寫(xiě)程序定義Point類,在類中定義整型的私有成員變量x,y,定義成員函數(shù)Point& operator++();Point operator++(int);以實(shí)現(xiàn)對(duì)Point類重載“++”運(yùn)算符,定義成函數(shù)Point& operator –();Point operator 也就是函數(shù)的重載。 6、部分參考代碼 Lab8_1 #include class Point{ public: Point(double x=0.0,double y=0.0):xray(x),yray(y){} Point operator++(int);Point operator--(int);void show();private: double xray;double yray;}; Point Point::operator++(int){ return Point(xray++,yray++);} Point Point::operator--(int){ return Point(xray--,yray--);} void Point::show(){ cout<<“x坐標(biāo)為”< int main(){ Point p(4.5,6.5);cout<<“進(jìn)行運(yùn)算前的情況:”< show(&v);return 0;} 學(xué)習(xí)C++應(yīng)該看的書(shū) 初級(jí):語(yǔ)法/語(yǔ)意(C++) 《Essential C++ 中文版》,侯俊杰 譯,282頁(yè) 《C++大學(xué)教程(第二版)》,邱仲潘等 譯,816頁(yè) 《C++ Primer 中文版》,侯俊杰 譯,《標(biāo)準(zhǔn)C++寶典》,林麗閩等 譯,766頁(yè) 《C++ 編程思想》,劉宗田等 譯,420頁(yè) 中級(jí): 《More Effective C++中文版》,侯俊杰,培生 2000.318頁(yè) 《Effective C++ 2/e 中文版》,侯俊杰,培生 2000.256頁(yè) 《Exceptional C++中文版》,侯俊杰,培生 2000.248頁(yè) 高級(jí): 《windows 程序設(shè)計(jì) 》 《深入淺出MFC》 《深度探索C++物件模型》,侯俊杰 譯 《設(shè)計(jì)模式》,李英軍等譯,機(jī)械工業(yè)出版社,2000.254頁(yè) 《重構(gòu)-改善既有代碼的設(shè)計(jì)》 學(xué)好一門(mén)語(yǔ)言任重而道遠(yuǎn) 下面是一些建議,希望你能對(duì)c++有一定的了解和認(rèn)識(shí)。 如何認(rèn)識(shí)c++? 對(duì)這個(gè)問(wèn)題會(huì)感到困惑的,也只有那些剛踏入編程大門(mén)的初學(xué)者。因?yàn)閷?duì)于很多工作多年的老年而言,看到這個(gè)問(wèn)題也只會(huì)會(huì)心一笑。對(duì)于他們而言,無(wú)所謂存在是否要學(xué)C++的問(wèn)題。他們所處的環(huán)境,所做的業(yè)務(wù),已經(jīng)決定了他們只能使用何種語(yǔ)言。更進(jìn)一步,那些得道的大俠,語(yǔ)言只不過(guò)是他們的工具,信手拈來(lái),他們心中已經(jīng)沒(méi)有語(yǔ)言,他就是語(yǔ)言,語(yǔ)言就是他,合而為一,乃為共同體。 開(kāi)篇之前,先略微聲明一下。本文目的不在于為C++辯護(hù)或抬舉,當(dāng)然也不會(huì)有為此而抬高或打壓別的編程語(yǔ)言的意圖。所有的,僅僅是有感而發(fā),并且還是從我個(gè)人的角度,有所缺失在所難免。如果你是老鳥(niǎo),其中之缺還望相見(jiàn)一笑;如果你是菜鳥(niǎo),對(duì)于文中的贊美和批評(píng),請(qǐng)擦亮眼睛,別被我忽悠了。 首先我們先要知道一點(diǎn),C++是一門(mén)什么語(yǔ)言?簡(jiǎn)單點(diǎn)來(lái)說(shuō),C++是一門(mén)接近于全能的語(yǔ)言。為什么說(shuō)是接近呢?因?yàn)镃++有一門(mén)語(yǔ)言是無(wú)法取代的,那 就是匯編。再直白點(diǎn)來(lái)說(shuō),匯編對(duì)于寄存器的操作,C++是無(wú)法勝任的。不信?你試試用C++來(lái)改寫(xiě)一下PC寄存器看看?沒(méi)轍吧? “接近”可以理解了,那么“全能”呢?我們知道,C++是兼容C的。不嚴(yán)謹(jǐn)?shù)卣f(shuō),我們可以簡(jiǎn)單認(rèn)為C只是C++的一個(gè)子集,所以C能做的,C++也能做,這個(gè)應(yīng)該沒(méi)有人有異議。為了方便,以下所描述的C++,在某些方面也代表C,之所以沒(méi)采用C/C++這樣的寫(xiě)法,僅僅是為了保護(hù)鍵盤(pán)而已。轉(zhuǎn)回正題,那C#呢?JAVA呢?它們所能做的,比如網(wǎng)絡(luò)方面的應(yīng)用,B/S的方方面面,怎么就沒(méi)見(jiàn)C++的身影呢?關(guān)于這個(gè)問(wèn)題嘛,我們從另一個(gè)角度來(lái)看,C#和JAVA的運(yùn)行基礎(chǔ)是什么?沒(méi)錯(cuò),是虛擬機(jī)。虛擬機(jī)是用什么寫(xiě)的?嘿嘿,C++。所以,你完全可以用C++先寫(xiě)一個(gè)虛擬機(jī),然后再在虛擬機(jī)上解釋C++語(yǔ)法。是不是很酷?當(dāng)然,我想現(xiàn)實(shí)中是不會(huì)有人那么去做的。就像從深圳到上海,你可以坐飛機(jī)去,也可以騎自行車去。兩者都能到達(dá)目的地,但我估計(jì)沒(méi)幾個(gè)人會(huì)選擇后者。這就是效率問(wèn)題。坐飛機(jī),眼一睜一閉,就到了;騎自行車?呃,這時(shí)間就不好估計(jì)了。所以這領(lǐng)域,該讓C#的,或是JAVA的,就讓它們?nèi)フ垓v吧。至于C++,就讓它干在一旁瞪眼好了,除非你一定想要耍耍酷。 接著,我們就來(lái)看看桌面應(yīng)用吧。所謂的桌面應(yīng)用,我們狹義一點(diǎn),就是桌面應(yīng)用程序??偟膩?lái)說(shuō),目前在這領(lǐng)域,C++確實(shí)還能占有一席之地。但這僅有的一席之地,也岌岌可危。在XP之前,因?yàn)橄到y(tǒng)都是沒(méi)有預(yù)裝.net framework,所以C++的對(duì)手無(wú)非就是VB和DELPHI,但這兩者根本無(wú)法撼動(dòng)C++這顆大樹(shù)。雖然XP也能裝.net framework,但為了一個(gè)應(yīng)用而弄一個(gè)體積如此巨大的玩意,卻有那么一點(diǎn)點(diǎn)的不現(xiàn)實(shí)。但后XP時(shí)代,世界就不一樣了。Vista已經(jīng)預(yù)裝了.net framework,更不用說(shuō)Windows 7。甚至還有傳言,Windows 7的用戶界面就是用C#搞定的。何況,C#還有殺手锏,能和Silverlight完美結(jié)合,大大減輕UI的開(kāi)發(fā)難度??雌饋?lái),在今后的日子,在這個(gè)桌面應(yīng)用領(lǐng)域,C++日子過(guò)得并不舒坦。在這領(lǐng)域,可能C++還能耀武揚(yáng)威的,也許就剩下大型的3D游戲了。雖然用.net配合OpenGL或Direct3D也能做C++的事,但效率卻會(huì)大打折扣。雖然隨著硬件的不斷提升,可能這折扣會(huì)不斷縮小,但畢竟還是存在的。只要折扣存在,那些游戲廠商就不會(huì)放棄C++,因?yàn)槟軆?yōu)化,為何不優(yōu)化?但,也許也僅僅限于此了。C++,它淚流滿面。 最后呢,就是嵌入式領(lǐng)域。在這里,是C++的天下,C++是永遠(yuǎn)的王者。它不是一個(gè)人在戰(zhàn)斗!此刻,它靈魂附體!你見(jiàn)過(guò)那些RTOS是用C++以外的語(yǔ)言寫(xiě)的(再次重申,正如前文所說(shuō),這里的C++也代表了C)?至少我印象中沒(méi)有。嵌入式linux支持.net?除非微軟的腦袋秀逗了。也許有人說(shuō),WinCE不是可以支持.net么?支持是可以支持,但并不代表所有的WinCE設(shè)備都支持。因?yàn)閃inCE是可裁剪的操作系統(tǒng),也許是為了節(jié)約內(nèi)存空間,也許是為了啟動(dòng)速度,或是由于別的雜七雜八的,甚至莫名其妙的理由,很多廠商根本就不會(huì)將.net這個(gè)會(huì)將系統(tǒng)膨脹至少4M的組件加到產(chǎn)品去??纯碬inCE的內(nèi)核代碼,看看WinCE的BSP包,哪里有.net代碼的身影?全部清一色的C++。甚至于WinCE的應(yīng)用程序,微軟的態(tài)度也非常明確,在桌面只能.net使用的Silverlight,在WinCE SP3添加之后,卻是更改為了C++接口。王者,絕對(duì)的王者,根本就不可能有別的語(yǔ)言在這里將C++撼動(dòng)!此時(shí),C++站起來(lái)了!腰板直了! 說(shuō)了那么多,那么我們的最后,就來(lái)看看為什么大家都說(shuō)學(xué)好C++難吧。如果你對(duì)學(xué)好C++沒(méi)啥興趣,以下的文字估計(jì)對(duì)你也沒(méi)啥營(yíng)養(yǎng),你可以完全忽略不計(jì),可以很愉快或很氣憤地將當(dāng)前網(wǎng)頁(yè)給咔嚓掉。 其實(shí)學(xué)C++很簡(jiǎn)單,但難就難在這個(gè)“好”字。初學(xué)者會(huì)發(fā)現(xiàn),入門(mén)很簡(jiǎn)單,因?yàn)镃++也沒(méi)啥語(yǔ)法;但搞清楚語(yǔ)法后,接下來(lái)就犯糊涂了,下一步應(yīng)該怎么走呢?只所以產(chǎn)生這種原因,是因?yàn)镃++太靈活了。對(duì)于一種功能,C++有各種各樣的方法,究竟什么方法才是最合適的?比如說(shuō),傳遞給函數(shù)的形參,什么時(shí)候該使用指針,什么時(shí)候該使用引用?就連平常得再也不能平常的指針轉(zhuǎn)型,有C的括號(hào)形式,還有C++特有的dynamic_cast和reinterpret_cast,究竟哪個(gè)才是該使用的?更不用說(shuō)分配內(nèi)存了,既有malloc,還有new,如果算上STL的話,還有一個(gè)resize。我想所有的這些,對(duì)于初學(xué)者而言,如果他看著這些能夠腿不痛腰不酸,那么我強(qiáng)烈佩服這人的淡定力。 C++還有更讓初學(xué)者郁悶的是,即使不用STL,不用類,不用虛擬繼承,甚至不用C++的一切特性,也是能夠完成所相應(yīng)的功能。所以,疑惑了,C++是什么?也許這時(shí)候,很多人就會(huì)想,如果選擇是唯一的,那是多么地幸福啊!因此,很多人就轉(zhuǎn)向了C#(或別的語(yǔ)言),因?yàn)閷?duì)于某些操作,方法是唯一的;即使不是唯一,也沒(méi)有C++那么繁多。 沒(méi)打算在這論述該如何學(xué)習(xí)C++,因?yàn)橐磺€(gè)人有一千種方法,而這一千種方法,還不一定適合你。但有一點(diǎn)是共通的,那就是多看書(shū)。將市面上經(jīng)典的C++著作,仔仔細(xì)細(xì)地消化,相信一定能達(dá)到爐火純青的地步。即使達(dá)不到吧,也沒(méi)事,不會(huì)作詩(shī)也會(huì)呤吧?只是,這時(shí)候意志力就非常重要,當(dāng)然也需要那么一點(diǎn)點(diǎn)情商,要相信沒(méi)有邁不過(guò)的坎。 最后的最后,以一句來(lái)結(jié)尾:C++有風(fēng)險(xiǎn),入行需謹(jǐn)慎。 什么是c++? C++ C++這個(gè)詞在中國(guó)大陸的程序員圈子中通常被讀做“C加加”,而西方的程序員通常讀做“C plus plus”,“CPP”。它是一種使用非常廣泛的計(jì)算機(jī)編程語(yǔ)言。C++是一種靜態(tài)數(shù)據(jù)類型檢查的,支持多重編程范式的通用程序設(shè)計(jì)語(yǔ)言。它支持過(guò)程化程序設(shè)計(jì)、數(shù)據(jù)抽象、面向?qū)ο蟪绦蛟O(shè)計(jì)、制作圖標(biāo)等等泛型程序設(shè)計(jì)等多種程序設(shè)計(jì)風(fēng)格。 C++發(fā)展歷史簡(jiǎn)單介紹 C語(yǔ)言之所以要起名為“C”,是因?yàn)樗侵饕獏⒖寄莻€(gè)時(shí)候的一門(mén)叫B的語(yǔ)言,它的設(shè)計(jì)者認(rèn)為C語(yǔ)言是B語(yǔ)言的進(jìn)步,所以就起名為C語(yǔ)言;但是B語(yǔ)言并不是因?yàn)橹斑€有個(gè)A語(yǔ)言,而是B語(yǔ)言的作者為了紀(jì)念他的妻子,他的妻子名字的第一個(gè)字母是B; 當(dāng)C語(yǔ)言發(fā)展到頂峰的時(shí)刻,出現(xiàn)了一個(gè)版本叫C with Class,那就是C++最早的版本,在C語(yǔ)言中增加class關(guān)鍵字和類,那個(gè)時(shí)候有很多版本的C都希望在C語(yǔ)言中增加類的概念;后來(lái)C標(biāo)準(zhǔn)委員會(huì)決定為這個(gè)版本的C起個(gè)新的名字,那個(gè)時(shí)候征集了很多種名字,最后采納了其中一個(gè)人的意見(jiàn),以C語(yǔ)言中的++運(yùn)算符來(lái)體現(xiàn)它是C語(yǔ)言的進(jìn)步,故而叫C++,成立了C++標(biāo)準(zhǔn)委員會(huì)。 美國(guó)AT&T貝爾實(shí)驗(yàn)室的本賈尼·斯特勞斯特盧普(Bjarne Stroustrup)博士在20世紀(jì)80年代初期發(fā)明并實(shí)現(xiàn)了C++(最初這種語(yǔ)言被稱作“C with Classes”)。一開(kāi)始C++是作為C語(yǔ)言的增強(qiáng)版出現(xiàn)的,從給C語(yǔ)言增加類開(kāi)始,不斷的增加新特性。虛函數(shù)(virtual function)、運(yùn)算符重載(operator overloading)、多重繼承(multiple inheritance)、模板(template)、異常(exception)、RTTI、命名空間(name space)逐漸被加入標(biāo)準(zhǔn)。1998年國(guó)際標(biāo)準(zhǔn)組織(ISO)頒布了C++程序設(shè)計(jì)語(yǔ)言的國(guó)際標(biāo)準(zhǔn)ISO/IEC 1488-1998。C++是具有國(guó)際標(biāo)準(zhǔn)的編程語(yǔ)言,通常稱作ANSI/ISO C++。1998年是C++標(biāo)準(zhǔn)委員會(huì)成立的第一年,以后每5年視實(shí)際需要更新一次標(biāo)準(zhǔn),下一次標(biāo)準(zhǔn)更新原定是在2009年,目前我們一般稱該標(biāo)準(zhǔn)C++0x,但是由于對(duì)于新特性的爭(zhēng)端激烈,除了在Technical Report 1(tr1)中的新增修改被基本確定外,完整的標(biāo)準(zhǔn)還遙遙無(wú)期。況且遺憾的是,由于C++語(yǔ)言過(guò)于復(fù)雜,以及經(jīng)歷了長(zhǎng)年的演變,直到現(xiàn)在(2010年)都沒(méi)有有一個(gè)編譯器完全符合這個(gè)標(biāo)準(zhǔn)。 目前最符合和接近C++標(biāo)準(zhǔn)的編譯器有為 GNU GCC 4.5.0 和 Visual Studio 2010 等。 另外,就目前學(xué)習(xí)C++而言,可以認(rèn)為他是一門(mén)獨(dú)立的語(yǔ)言;他并不依賴C語(yǔ)言,我們可以完全不學(xué)C語(yǔ)言,而直接學(xué)習(xí)C++。根據(jù)《C++編程思想》(Thinking in C++)一書(shū)所評(píng)述的,C++與C的效率往往相差在正負(fù)5%之間。所以有人認(rèn)為在大多數(shù)場(chǎng)合C++ 完全可以取代C語(yǔ)言(然而我們?cè)趩纹瑱C(jī)等需要謹(jǐn)慎利用空間、直接操作硬件的地方還是要使用C語(yǔ)言)。 子語(yǔ)言 根據(jù)Effective C++第三版第一條款的描述,現(xiàn)在C++由以下四個(gè)“子語(yǔ)言”組成:第三篇:C++實(shí)驗(yàn)報(bào)告
第四篇:c++學(xué)習(xí)方法
第五篇:什么是c++(本站推薦)