久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

c++學習方法

時間:2019-05-15 10:25:29下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《c++學習方法》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《c++學習方法》。

第一篇:c++學習方法

學習C++應該看的書

初級:語法/語意(C++)

《Essential C++ 中文版》,侯俊杰 譯,282頁

《C++大學教程(第二版)》,邱仲潘等 譯,816頁

《C++ Primer 中文版》,侯俊杰 譯,《標準C++寶典》,林麗閩等 譯,766頁

《C++ 編程思想》,劉宗田等 譯,420頁

中級:

《More Effective C++中文版》,侯俊杰,培生 2000.318頁

《Effective C++ 2/e 中文版》,侯俊杰,培生 2000.256頁

《Exceptional C++中文版》,侯俊杰,培生 2000.248頁

高級:

《windows 程序設計 》

《深入淺出MFC》

《深度探索C++物件模型》,侯俊杰 譯

《設計模式》,李英軍等譯,機械工業出版社,2000.254頁

《重構-改善既有代碼的設計》

學好一門語言任重而道遠

下面是一些建議,希望你能對c++有一定的了解和認識。

如何認識c++?

對這個問題會感到困惑的,也只有那些剛踏入編程大門的初學者。因為對于很多工作多年的老年而言,看到這個問題也只會會心一笑。對于他們而言,無所謂存在是否要學C++的問題。他們所處的環境,所做的業務,已經決定了他們只能使用何種語言。更進一步,那些得道的大俠,語言只不過是他們的工具,信手拈來,他們心中已經沒有語言,他就是語言,語言就是他,合而為一,乃為共同體。

開篇之前,先略微聲明一下。本文目的不在于為C++辯護或抬舉,當然也不會有為此而抬高或打壓別的編程語言的意圖。所有的,僅僅是有感而發,并且還是從我個人的角度,有所缺失在所難免。如果你是老鳥,其中之缺還望相見一笑;如果你是菜鳥,對于文中的贊美和批評,請擦亮眼睛,別被我忽悠了。

首先我們先要知道一點,C++是一門什么語言?簡單點來說,C++是一門接近于全能的語言。為什么說是接近呢?因為C++有一門語言是無法取代的,那

就是匯編。再直白點來說,匯編對于寄存器的操作,C++是無法勝任的。不信?你試試用C++來改寫一下PC寄存器看看?沒轍吧?

“接近”可以理解了,那么“全能”呢?我們知道,C++是兼容C的。不嚴謹地說,我們可以簡單認為C只是C++的一個子集,所以C能做的,C++也能做,這個應該沒有人有異議。為了方便,以下所描述的C++,在某些方面也代表C,之所以沒采用C/C++這樣的寫法,僅僅是為了保護鍵盤而已。轉回正題,那C#呢?JAVA呢?它們所能做的,比如網絡方面的應用,B/S的方方面面,怎么就沒見C++的身影呢?關于這個問題嘛,我們從另一個角度來看,C#和JAVA的運行基礎是什么?沒錯,是虛擬機。虛擬機是用什么寫的?嘿嘿,C++。所以,你完全可以用C++先寫一個虛擬機,然后再在虛擬機上解釋C++語法。是不是很酷?當然,我想現實中是不會有人那么去做的。就像從深圳到上海,你可以坐飛機去,也可以騎自行車去。兩者都能到達目的地,但我估計沒幾個人會選擇后者。這就是效率問題。坐飛機,眼一睜一閉,就到了;騎自行車?呃,這時間就不好估計了。所以這領域,該讓C#的,或是JAVA的,就讓它們去折騰吧。至于C++,就讓它干在一旁瞪眼好了,除非你一定想要耍??帷?/p>

接著,我們就來看看桌面應用吧。所謂的桌面應用,我們狹義一點,就是桌面應用程序??偟膩碚f,目前在這領域,C++確實還能占有一席之地。但這僅有的一席之地,也岌岌可危。在XP之前,因為系統都是沒有預裝.net framework,所以C++的對手無非就是VB和DELPHI,但這兩者根本無法撼動C++這顆大樹。雖然XP也能裝.net framework,但為了一個應用而弄一個體積如此巨大的玩意,卻有那么一點點的不現實。但后XP時代,世界就不一樣了。Vista已經預裝了.net framework,更不用說Windows 7。甚至還有傳言,Windows 7的用戶界面就是用C#搞定的。何況,C#還有殺手锏,能和Silverlight完美結合,大大減輕UI的開發難度。看起來,在今后的日子,在這個桌面應用領域,C++日子過得并不舒坦。在這領域,可能C++還能耀武揚威的,也許就剩下大型的3D游戲了。雖然用.net配合OpenGL或Direct3D也能做C++的事,但效率卻會大打折扣。雖然隨著硬件的不斷提升,可能這折扣會不斷縮小,但畢竟還是存在的。只要折扣存在,那些游戲廠商就不會放棄C++,因為能優化,為何不優化?但,也許也僅僅限于此了。C++,它淚流滿面。

最后呢,就是嵌入式領域。在這里,是C++的天下,C++是永遠的王者。它不是一個人在戰斗!此刻,它靈魂附體!你見過那些RTOS是用C++以外的語言寫的(再次重申,正如前文所說,這里的C++也代表了C)?至少我印象中沒有。嵌入式linux支持.net?除非微軟的腦袋秀逗了。也許有人說,WinCE不是可以支持.net么?支持是可以支持,但并不代表所有的WinCE設備都支持。因為WinCE是可裁剪的操作系統,也許是為了節約內存空間,也許是為了啟動速度,或是由于別的雜七雜八的,甚至莫名其妙的理由,很多廠商根本就不會將.net這個會將系統膨脹至少4M的組件加到產品去。看看WinCE的內核代碼,看看WinCE的BSP包,哪里有.net代碼的身影?全部清一色的C++。甚至于WinCE的應用程序,微軟的態度也非常明確,在桌面只能.net使用的Silverlight,在WinCE SP3添加之后,卻是更改為了C++接口。王者,絕對的王者,根本就不可能有別的語言在這里將C++撼動!此時,C++站起來了!腰板直了!

說了那么多,那么我們的最后,就來看看為什么大家都說學好C++難吧。如果你對學好C++沒啥興趣,以下的文字估計對你也沒啥營養,你可以完全忽略不計,可以很愉快或很氣憤地將當前網頁給咔嚓掉。

其實學C++很簡單,但難就難在這個“好”字。初學者會發現,入門很簡單,因為C++也沒啥語法;但搞清楚語法后,接下來就犯糊涂了,下一步應該怎么走呢?只所以產生這種原因,是因為C++太靈活了。對于一種功能,C++有各種各樣的方法,究竟什么方法才是最合適的?比如說,傳遞給函數的形參,什么時候該使用指針,什么時候該使用引用?就連平常得再也不能平常的指針轉型,有C的括號形式,還有C++特有的dynamic_cast和reinterpret_cast,究竟哪個才是該使用的?更不用說分配內存了,既有malloc,還有new,如果算上STL的話,還有一個resize。我想所有的這些,對于初學者而言,如果他看著這些能夠腿不痛腰不酸,那么我強烈佩服這人的淡定力。

C++還有更讓初學者郁悶的是,即使不用STL,不用類,不用虛擬繼承,甚至不用C++的一切特性,也是能夠完成所相應的功能。所以,疑惑了,C++是什么?也許這時候,很多人就會想,如果選擇是唯一的,那是多么地幸福??!因此,很多人就轉向了C#(或別的語言),因為對于某些操作,方法是唯一的;即使不是唯一,也沒有C++那么繁多。

沒打算在這論述該如何學習C++,因為一千個人有一千種方法,而這一千種方法,還不一定適合你。但有一點是共通的,那就是多看書。將市面上經典的C++著作,仔仔細細地消化,相信一定能達到爐火純青的地步。即使達不到吧,也沒事,不會作詩也會呤吧?只是,這時候意志力就非常重要,當然也需要那么一點點情商,要相信沒有邁不過的坎。

最后的最后,以一句來結尾:C++有風險,入行需謹慎。

第二篇:C++實驗

上機實驗:

1、回文是指正讀,反讀均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文,試用STACK類編寫該程序。

#include #include #include int IsPalindrome(const char *cScr);void main(void){ char cStr[21];while(1){ gets(cStr);printf(“%dn”,IsPalindrome(cStr));} } int IsPalindrome(const char *cScr){ int iLen = strlen(cScr);//預留數組首元素,棧頂從第二元素開始

int top = 1;char *cMyStack =(char *)malloc((iLen/2+1)*sizeof(char));//定位對原始數組的檢測索引初始位置 cMyStack[0] = iLen/2;if(1 == iLen%2){ ++cMyStack[0];}

//將原始數組的一半元素入棧 for(top=1;top<=iLen/2;top++){ cMyStack[top] = *(cScr+top-1);} //從棧頂開始依次匹配

while(*(cScr+cMyStack[0])== cMyStack[--top] && cMyStack[0]++ < iLen){} if(0 == top){//是回文數 free(cMyStack);return 1;} else {//不是回文數

free(cMyStack);return 0;} } 運行結果:

2.利用兩個棧類S1、S2模擬一個隊列時,編寫一程序利用棧的運算實現隊列的插入、刪除以及判斷隊列空的運算。

#include #include #include using namespace std;template class stack2queue{ public: void pushBack(T);void popFront();T& front();bool empty()const;private: stack mStack1;stack mStack2;};template void stack2queue::pushBack(T x){ mStack1.push(x);}

template void stack2queue::popFront(){ if(mStack2.empty()){ while(!mStack1.empty()){ mStack2.push(mStack1.top());mStack1.pop();} }

assert(!mStack2.empty());mStack2.pop();} template T& stack2queue::front(){ if(mStack2.empty()){ while(!mStack1.empty()){ mStack2.push(mStack1.top());mStack1.pop();} } assert(!mStack2.empty());return mStack2.top();} template bool stack2queue::empty()const{ return(mStack1.empty()&& mStack2.empty());} template void printQueue(stack2queue q){ cout << “From front to back:/t(”;if(!q.empty()){ cout << q.front();q.popFront();while(!q.empty()){ cout << “, ” << q.front();q.popFront();} }else{ cout << “NULL”;} cout << “)” << endl;} int main(){ stack2queue sq;

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;} 運行結果:

實驗2:

聲明復數的類Complex,使用友元函數add實現復數的加法。

#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<<“復數:”<< real <<“ + ”<< image <<“i”<< endl;if(image<0)

cout<<“復數:”<< real <<“-”<< image <<“i”<< endl;}

friend Complex add(Complex ,Complex);//聲明友元函數 };

Complex add(Complex c1, Complex c2)//定義友元函數

{

Complex c3;

c3.real = c1.real + c2.real;//訪問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<<“復數一:”;c1.print();cout<<“復數二:”;c2.print();cout<<“相加后:”;c3.print();}

結果:

實驗三:

7-5 定義一個基類Shape,在此基礎上派生出一個Rectangle和Circle,二者都有getArea()函數計算對象的面積。使用Rectangle類創建一個派生類Square.#include using namespace std;#define PI 3.1415926 class Shape {

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:”<GetArea()<

cout<<“CirArea:”<GetArea()<

return 1;

} 運行結果:

7-10.定義一個Object類,有數據成員weight及相應的操作函數,由此派生出Box類,增加數據成員height和width及相應的操作函數,聲明一個Box對象,觀察構造函數和析構函數的調用順序。#include class object { private: int Weight;public:

object(){ cout<<“構造object對象”<

class box:public object

{ private: int Height,Width;public: box(){

cout<<“構造box對象”<

第三篇:C++實驗報告

姓名:XX 學院:XXX 班級:XXX 學號:XXX

i++;

} while(i<=10);cout<<“sum=”<

#include using namespace std;void main(){ int i(1),sum(0);

for(i;i<=10,i++)

{

sum+=i;

}

cout<<“sum=”< using namespace std;const float pi=3.1416;void main(){ int itype;

cout<<“不是合法的輸入”< using namespace std;struct riqi { int year;int mon;int day;int hour;int minut;int second;};void main(){ riqi a;cout<<“輸入時間日期”<>a.year;cout<<“輸入月份”<

實驗

三、函數的應用(2學時)

1、實驗目的:

掌握函數的定義和調用方法。練習重載函數使用。練習函數模板的使用 練習使用系統函數。

在main()函數中提示輸入兩個整數x,y,使用cin語句得到x,y的值,調用pow(x,y)函數計算x的y次冪的結果,再顯示出來。程序名:lab3_4.cpp。

編寫遞歸函數int fib(int n),在主程序中輸入n的值,調用fib函數計算Fibonacci級數。公式為fib(n)=fib(n-1)+fib(n-2),n>2;fib(1)=fib(2)=1。使用if語句判斷函數的出口,在程序中用cout語句輸出提示信息。程序名:lab3_5.cpp。

7)調試操作步驟如下:

選擇菜單命令Build|Start Debug |Step In,系統進入單步執行狀態,程序開始運行,并出現一個DOS窗口,此時光標停在main()函數的入口處。

把光標移到語句answer=fib(n)前,從Debug菜單單擊Run To Cursor,在程序運行的DOS窗口中按提示輸入數字10,這時回到可視界面中,光標停在第11行,觀察一下n的值。

從Debug菜單中單擊Step Into,程序進入fib函數,觀察一下n的值,把光標移到語句return(fib(n-2)+fib(n-1))前,從Debug菜單單擊Run to Cursor,再單擊Step Into,程序遞歸調用fib函數,又進入fib函數,觀察n的值。

繼續執行程序,參照上述的方法,觀察程序的執行順序,加深對函數調用和遞歸調用的理解。

再試試Debug菜單欄中的別的菜單項,熟悉Debug的各種方法。

4、實驗原理

C++中函數的重載使得同樣的函數名下,只要參數類型、數目不同時,即可根據輸入的數據進行相應的函數調用,使用起來簡單方便。

5、思考與體會

C++中,函數的運用與之前學過的C語言既有相同之處,也有著不同的地方。相同的地方在于格式、用法等框架上的不變。但是C語言中對于同樣的函數名是只能夠申明一種函數的,倘若有相同的函數名出現系統即會報錯,所以用起來有時是極為不便

0

//參數為兩個雙精度浮點形的函數 int max1(double a,double b){ a=a>b?a:b;return a;} //參數為三個雙精度浮點形的函數 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 using namespace std;int max1(int a,int b){ a=a>b?a:b;return a;} int max1(int a,int b,int c){ a=a>b?a:b;a=a>c?a:c;return a;}

int main(){ int i,j,k;cout<<“請輸入要比較的3個數:

”<

2131415

public: Rank rank;int frequency;float voltage;CPU(Rank r,int f,float v){

//構造函數

cout<<“構造了一個CPU”<

rank=r;

frequency=f;

voltage=v;} void run(){

cout<<“CPU開始運行”<

} void stop(){

cout<<“CPU停止運行”<

cout<<“RANK=”<

cout<<“frequency=”<

cout<<“voltage=”<

};

int main(){ CPU cpu(p5,500,2000);cpu.run();cpu.show();cpu.stop();return 0;}

Lab4_2 #include using namespace std;enum Rank{p1=1,p2,p3,p4,p5,p6,p7};//CPU類 class CPU{ public:

//析構函數-17

computer(Rank r,int f,float v){

CPU cpu(r,f,v);

//定義CPU對象

RAM ram(1);

//定義RAM對象

CDROM cdrom(1);

//定義CDROM對象

cpu.run();

cpu.show();

cpu.stop();} };int main(){ computer com(p4,300,3000);return 0;}

實驗

七、繼承與派生(一、二)4學時

1、實驗目的:

學習定義和使用類的繼承關系,定義派生類。熟悉不同繼承方式下對基類成員的訪問控制。學習利用虛基類解決二義性問題

2、實驗任務 a)定義一個基類Animal,有私有整型成員變量age,構造其派生類dog,在其成員函數SetAge(int n)中直接給age賦值,看看會有什么問題,把age改為公有成員變量,還會有問題嗎?編程試試看。b)定義一個基類BaseClass,有整型成員變量Number ,構造其派生類DerivedClass,觀察構造函數和析構函數的執行情況。c)定義一個車(vehicle)基類,具有MaxSpeed、Weight等成員變量,Run、Stop等成員函數,由此派生出自行車(bicycle)類、汽車(motorcar)類。自行車類有高度(height)等屬性,汽車類有座位數(SeatNum)等屬性。從bicycle和motorcar派生出摩托車(motorcycle)類,在繼承過程中,注意把vehicle設置為虛基類。如果不把vehicle設置為虛基類,會有什么問題?編程試試看。

3、實驗步驟

編寫程序定義基類Animal,成員變量age定義為私有的。構造派生類dog,在其成員函數SetAge(int n)中直接對age賦值時,會出現類似以下的錯誤提示:

error C2248:’age’:cannot access private member declared in class ‘Animal’

error C2248:’age’:cannot access private member declared in class ‘Animal’

把age改為公有成員變量后重新編譯就可以了。程序名為:lab7_1.cpp

0

確方便我們編程。

6、部分參考代碼

Lab7_1 #include using namespace std;

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 using namespace std;class BaseClass{ public: int Number;BaseClass(){

cout<<“這是父類的構造函數”<

cout<<“這是父類的析構函數”<

//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;} 實驗

八、多態性2學時

1、實驗目的:

掌握運算符重載的方法

習使用虛函數實現動態多態性。

2、實驗任務

a)定義Point類,有坐標x,y兩個成員變量;對Point類重載“++”、“--”運算符,實現對坐標值的改變。

定義一個車(vehicle)基類,有Run、Stop等成員函數,由此派生出自行車(bicycle)類、汽車(motorcar)類,從bicycle和motorcar派生出摩托車(motorcycle)類,它們都有Run、Stop等成員函數。觀察虛函的作用。

3、實驗步驟

編寫程序定義Point類,在類中定義整型的私有成員變量x,y,定義成員函數Point& operator++();Point operator++(int);以實現對Point類重載“++”運算符,定義成函數Point& operator –();Point operator

也就是函數的重載。

6、部分參考代碼

Lab8_1 #include using namespace std;

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坐標為”<

int main(){ Point p(4.5,6.5);cout<<“進行運算前的情況:”<

show(&v);return 0;}

第四篇:C++題

1、_____重載 ___不是面向對象系統所包含的要素。2、___構造函數_____的功能是對對象進行初始化。

3、在下列關鍵字中,用以說明類中私有成員的是_private___。

4、C++對C語言作了很多改進,(引進了類和對象的概念)使得C語言發生了質變,即從面向過程變成面向對象。

5、面向對象程序設計將數據與_對數據的操作_放在一起,作為一個相互依存、不可分割的整體來處理。6、已知f1(int)是類A 的公有成員函數,p 是指向成員函數f1()的指針,采用__ p=&A::f1___是正確的。

7、在說明:const char *ptr;中,ptr應該是___指向字符的常量指針_____。判斷:

1、空類就是沒有名字的類。錯

2、面向對象系統的封裝性是一種信息隱藏技術,目的在于將對象的使用者與設計者分開,使用者不必知道對象行為實現的細節,只需用設計者提供的協議命令對象去做即可。錯

3、引用類型和指針類型作為函數的形式參數時,對調用函數的實際參數的要求是一樣的,均是地址。

4、對象數組在創建時要求構造函數不能有任何參數。錯1.___靜態數據成員_____是一個類的多個對象共享的。

2.下列靜態數據成員的特性中,D)_靜態數據成員不是所有對象所共有的_是錯誤的.A)說明靜態數據成員時前邊要加關鍵字static來修飾 B)靜態數據成員在類體外進行初始化

C)引用靜態數據成員時,要在靜態數據成員名前加<類名>和作用域運算符 3.靜態成員的值對每個對象都是一樣的,它的值是可以更新的。()4.由于數據隱藏的需要,靜態數據成員通常被說明為(保護的)

5.下面對靜態數據成員的描述中,正確的是(靜態數據成員是類的所有對象共享的數據)1.允許訪問類的所有對象的私有成員,公有成員和保護成員的是(友元函數)2.類A是類B的友元,類B是類C的友元,則__D)__是正確的.A)類B是類A的友元B)類C是類A的友元C)類A是類C的友元D)以上都不對 3.一個類的友元函數能夠訪問該類的___所有成員___4.類模板的模板參數____D)______.A)只可作為數據成員的類型B)只可作為成員函數的返回類型 C)只可作為成員函數的參數類型D)以上三者皆可

5.一個(類模板)允許用戶為類定義一種模式,使得類中的某些數據成員、某些成員函數的參數和返回值可以取任意數據類型。

6.類模板的使用實際上是將類模板實例化成一個具體的___類_____。1 關于類和對象的說法不正確的是()C A類是對象的類,對象是類的對象

B系統不為類分配內存空間,而為對象分配內存空間 C如果把人看作動物,那么細菌也是動物

D類可以看作數據類型,對象也可以叫做對象的實體、實例等類是()的集合,分類的依據是()具有相同屬性和服務的一組對象抽象 1對象的封裝就是(可進可出,但是外界不能干涉內部的處理過程)C 2關于類的繼承不正確的是()C

A引入類的繼承目的就是為了代碼重用,提高編程效率B子女有父母的特征是類的繼承 C子繼父產業是類的繼承

D子類可以全部繼承父類的屬性和服務,也可部分繼承父類的屬性和服務 下列關于運算符重載的描述中 運算符重載不可以改變語法結構

友元重載運算符obj1〉obj2被C++編譯器解釋為(operator>(obj1,obj2))。下列運算符中,A)?:運算符在C++中不能重載。

繼承具有___傳遞性_,即當基類本身也是某一個類的派生類時,底層的派生類也會自動繼承間接基類的成員。派生類的對象對它的基類成員中___公有繼承的公有成員_____是可以訪問的。

在多繼承中,公有派生和私有派生對于基類成員在派生類中的可訪問性與單繼承的規則__部分相同,部分不同_。下列對派生類的描述中,__D)_____是錯誤的。

A)一個派生類可以作另一個派生類的基類B)派生類至少有一個基類 C)派生類的成員除了它自己的成員外,包含了它的基類的成員 D)派生類中繼承的基類成員的訪問權限到派生類保持不變對基類和派生類的關系描述中,____B)______是錯誤的。A)派生類是基類的具體化B)派生類是基類的子集 C)派生類是基類定義的延續 D)派生類是基類的組合派生類的構造函數的成員初始化列表中,不能包含__C)基類的子對象初始化____。A)基類的構造函數B)派生類中子對象的初始化

C)基類的子對象初始化D)派生類中一般數據成員的初始化

下列對派生類的描述中,錯誤的是(D.)

A. 派生類的缺省繼承方式是PRIVATEB. 派生類至少有一個基類

C. 一個派生類可以作為另一個派生類的基類D. 派生類只繼承了基類的公有成員和保密成員下列說法中錯誤的是(D.)

A. 公有繼承時基類中的public成員在派生類中是public的B. 公有繼承時基類中的private成員在派生類中是不可直接訪問的 C. 私有繼承時基類中的public成員在派生類中是private的 D. 私有繼承時基類中的public成員在派生類中是protected的若派生類的成員函數不能直接訪問基類中繼承來的某個成員,則該成員一定是基類中的私有成員)實現運行時的多態性要使用___虛函數__。

關于函數的描述中,A)派生類的虛函數與基類的虛函數具有不同的參數個數和類型__是正確的。關于動態聯編的下列敘述中,__A)__是錯誤的。

A)動態聯編是以虛函數為基礎的B)動態聯編調用虛函數操作是指向對象的指針或引用 C)動態聯編是在運行時確定所調用的函數代碼的D)動態聯編是在編譯時確定操作函數的用于類中虛成員函數說明的關鍵字()

A.virtualB.publicC.protectedD.private編譯時的多態性通常使用()獲得。

A.繼承B.虛函數C.重載函數D.析構函數

若要強制C++對虛函數的調用使用靜態聯編,則在調用中對該函數使用(指針)C++有(.2)種聯編。

虛函數必須是類的(成員函數)

不能說明為虛函數的是(構造函數)

不同的對象可以調用相同名稱的函數,并可導致完全不同的行為的現象稱為(.多態性)若析構函數是虛函數,則delete對析構函數的調用采用(重載函數)

若派生類中沒有對基類的虛函數進行重定義,則它繼承基類中的(成員函數)多態調用指(借助于指向對象的基類指針或引用調用一個純虛函數)動態聯編所支持的多態性稱為(運行時的多態性)下列描述中,()是抽象類的特性。

A)可以說明虛函數B)可以定義友元函數C)可以進行構造函數重載D)不能說明其對象(純虛函數)是一個在基類中說明的虛函數,它在該基類中沒有定義,但要求任何派生類中的可訪問性的規定是相同的。如果一個類至少有一個純虛函數,那么就稱該類為(抽象類)。下面哪個基類中的成員函數表示純虛函數(virtual void vf()=0)

關于純虛函數,下列表述正確的是(純虛函數是給出實現版本(即無函數體定義)的虛函數)下面哪個基類中的成員函數表示純虛函數()

A.virtual void vf(int)B.void vf(int)=0 C.virtual void vf()=0D.virtual void vf(int)||

關于純虛函數,下列表述正確的是(純虛函數是給出實現版本(即無函數體定義)的虛函數)1 下列關于對象的描述不正確的是(A)A對象只能描述有形的東西

B對象具有屬性和服務兩個主要因素

C現實世界中的一切事物都可以看作對象,但只有在具體的系統中加以論述才有實際的意義

D對象的屬性是對象的靜態特征,服務是動態特征,并且對象的屬性只能由本對象的服務來操作 2 構成對象的兩個主要因素是(屬性)和(服務),其中(服務)屬于動態屬性,(屬性)屬于靜態屬性,(屬性)只能由(服務)來操作。關于多繼承二義性的描述中,錯誤的是C A.一個派生類的基類中都有某個同名成員,在派生類中對這個成員的訪問可能出現二義性B.解決二義性的最常用的方法是對成員名的限度法C.基類和派生類同時出現的同名函數,也存在二義性問題D.一個派生類是從倆個基類派生出來的,而這倆個基類有又以個共同的基類,對該基類成員進行訪問時,可能出現二義性。設置虛基類的目的是 消除二義性 虛基類聲明 class B virtual public

帶有虛基類的多層派生類構造函數的成員初始化列表都要列出虛基類構造函數,這樣將對虛基類初始化 二次 子類型描述錯誤的是 A子類型關系是可逆的A子類型關系是可逆的 B公有派生類的對象可以初始化基類的引用 C只有在公有繼承下,派生類是基類的字類型D子類型是可傳遞的不符合復制兼容規則的是B基類的對象可以賦值給派生類的對象

A派生類的對象可以賦值給基類的對象B基類的對象可以賦值給派生類的對象C派生類的對象可以初始化給基類的對象D 派生類的對象的地址可以賦值給指向基類的指針

第五篇:c++作業

P179 5.9.2(11)

1.意圖

保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。

2.動機

對一些類來說,只有一個實例是很重要的。雖然系統中可以有許多打印機,但卻只應該有一個打印假脫機(printer spooler),只應該有一個文件系統和一個窗口管理器。一個數字濾波器只能有一個A / D轉換器。一個會計系統只能專用于一個公司。

我們怎么樣才能保證一個類只有一個實例并且這個實例易于被訪問呢?一個全局變量使得一個對象可以被訪問,但它不能防止你實例化多個對象。一個更好的辦法是,讓類自身負責保存它的唯一實例。這個類可以保證沒有其他實例可以被創建(通過截取創建新對象的請求),并且它可以提供一個訪問該實例的方法。這就是Singleton模式。

3.適用性

在下面的情況下可以使用Singleton模式.當類只能有一個實例而且客戶可以從一個眾所周知的訪問點訪問它時。當這個唯一實例應該是通過子類化可擴展的,并且客戶應該無需更改代碼就能使用一個擴展的實例時。

4.結構

5.參與者

Singleton

定義一個GetInstance操作,允許客戶訪問它的唯一實例。GetInstance是一個類操作(即Smalltalk中的一個類方法和C++中的一個靜態成員函數)??赡茇撠焺摻ㄋ约旱奈ㄒ粚嵗?。

6.協作

客戶只能通過Singleton的GetInstance操作訪問一個Singleton的實例。

7.效果

Singleton模式有許多優點:

1)對唯一實例的受控訪問因為Singleton類封裝它的唯一實例,所以它可以嚴格的控制客戶怎樣以及何時訪問它。

2)縮小名空間Singleton模式是對全局變量的一種改進。它避免了那些存儲唯一實例的全局變量污染名空間。

3)允許對操作和表示的精化Singleton類可以有子類,而且用這個擴展類的實例來配置一個應用是很容易的。你可以用你所需要的類的實例在運行時刻配置應用。

4)允許可變數目的實例這個模式使得你易于改變你的想法,并允許Singleton類的多個實例。此外,你可以用相同的方法來控制應用所使用的實例的數目。只有允許訪問Singleton實例的操作需要改變。

5)比類操作更靈活另一種封裝單件功能的方式是使用類操作(即C++中的靜態成員函數或者是Smalltalk中的類方法)。但這兩種語言技術都難以改變設計以允許一個類有多個實例。

此外,C++中的靜態成員函數不是虛函數,因此子類不能多態的重定義它們。

8.實現

class Singleton

{

static std::auto_ptr m_pInstance;

protected:

//prevent user making our any instance by manually

//構造函數是保護類型的。

Singleton(){}

public:

~Singleton(){}

//Return this singleton class' instance pointer

static Singleton* Instance()

{

if(!m_pInstance.get())

{

m_pInstance = std::auto_ptr(new Singleton());

}

return m_pInstance.get();

}

};

怎樣來使用它呢?不要試圖從這個類派生你的單件子類,那樣的結果是不妥當的,如果你需要多個單件子類,還是使用下面的宏定義更為妥當:

#define DEFINE_SINGLETON(cls)

private:

static std::auto_ptr m_pInstance;

protected:

cls(){}

public:

~cls(){}

static cls* Instance(){

if(!m_pInstance.get()){

m_pInstance = std::auto_ptr(new cls());

}

return m_pInstance.get();

}

#define IMPLEMENT_SINGLETON(cls)

std::auto_ptr cls::m_pInstance(NULL);

假定你需要實現一個單件類YY,這樣書寫:

class YY

{

DEFINE_SINGLETON(YY);

public:

//your interfaces here...};

在cpp文件中,書寫:

IMPLEMENT_SINGLETON(YY);

需要引入這個類的實例的時候,使用這樣的語句:

YY* pYY = YY::Instance();

這,就是全部。

如果需要定義其他的單件類,重復上面的定義,就可以了。

當想集中管理一個應用程序所需的所有配置時,可以聲明一個CToolsOptions的類,其中包含配置屬性集合。對于這個類的實例,顯然是一個實例就夠了;當編寫繪圖程序時,考慮繪制矩形,圓形等分別使用CGraphTool派生的工具類,每個派生類負責處理具體的繪制動作和相關的UI相應邏輯。這些工具類典型的在被用戶選擇工具欄的圖元按鈕時被選中。依照這種模式,你應該對所有的圖元工具從事注冊工作,使得繪圖程序了解運行時刻可以使用那些圖元工具。同樣的,負責管理注冊信息的這個管理器也只需

P2467.6.2(1)

必須把它作為類成員函數的運算符有:

(),[],->和任何賦值運算符,重載這些運算符時必須把操作符函數聲明為類的成員函數

什么時候定義類成員操作符重載,什么時候定義非類成員操作符重載?

答:(1)如果一個重載操作符是類成員,那么只有當跟它一起使用的左操作數是該類對象時,它才會被調用,如果該操作符的左操作數必須是其他類型,那么重載操作符必須是非類成員操作符重載。

(2)C++要求,賦值(=),下標([ ]),調用(())和成員訪問箭頭(->)操作符必須被指定為類成員操作符,否則錯誤。

下載c++學習方法word格式文檔
下載c++學習方法.doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內容由互聯網用戶自發貢獻自行上傳,本網站不擁有所有權,未作人工編輯處理,也不承擔相關法律責任。如果您發現有涉嫌版權的內容,歡迎發送郵件至:645879355@qq.com 進行舉報,并提供相關證據,工作人員會在5個工作日內聯系你,一經查實,本站將立刻刪除涉嫌侵權內容。

相關范文推薦

    C++ 心得

    2010.10.13 今天在學習用windows自帶的dos命令提示符窗口的命令: 列文件名dir,創建文件夾md(其他文件不能通過該命令創建,即使用了該類文件的后綴名,也只是將該名稱和后綴名一塊......

    C++學習心得

    C++學習心得 在計算機課程中,C++程序設計是計算機專業的一門必修基礎課,該語言以其高效而又實用的特性:既可以進行過程化程序設計,又可進行面向對象的程序設計,是進行軟件開發的......

    c++學習心得

    c++學習心得 2008-03-12 16:24 為初學者指路 首先聲明,我可不是什么高手,也就是剛脫貧。因為運氣很好,買到了幾本好書,在學習過程中幾乎沒走什么彎路,沒費什么勁就入門了,現在一般......

    C++心得體會

    C++學習心得體會 通過一學期對C++的學習,我感覺學習C++是有一定難度卻又是非常有趣 的科目。也是很有幫助的。 深刻感受到如果真的想要學好這么課,或者說是從這門課學到點......

    C++學習方法與習慣,滲透人生哲理,適用于其他語言編程(絕對有用)

    C++編程學習方法與習慣,滲透人生哲理,適用于其他語言編程(作者:SUPERSPEED_戰神) ? 事物的發展都有一定規律,學習也是如此,如果找到學習的規律,總結出一個良好的學習方法,那我們就會在......

    c++課程設計心得體會

    課程設計心得體會 學生成績管理是高等學校教務管理的重要組成部分,其內容較多,要完成能夠實現人員的信息錄入、查詢、修改、刪除、統計、保存、顯示等操作。系統具體實現的功......

    C++上機實驗報告

    第二次上機實驗報告 姓名:王小寧班級:學號: 031012 1234 第一題: 題目: 編寫一個類,聲明一個數據成員和一個靜態數據成員,其構造函數初始化數據成員,并把靜態數據成員加1,其析......

    C++上機實驗報告

    C++上機實驗報告 實驗名稱:實驗 專業班級: 姓名: 學號: 實驗日期: 10 11 實驗 目錄 1. 實驗目的 2. 實驗內容 3. 程序代碼 4. 調試結果 5. 實驗心得 1. 實驗目的 實驗10 (1......

主站蜘蛛池模板: 精品成人av一区二区三区| 老湿机69福利区无码| 漂亮人妻熟睡中被公侵犯中文版| 国产精品久久久久7777按摩| 亚洲精品久久久口爆吞精| 亚洲精品久久久久国色天香| 无码中文av波多野吉衣迅雷下载| 色综合久久成人综合网| 妺妺窝人体色www婷婷| 国自产拍偷拍精品啪啪模特| 国产亚洲精品久久久闺蜜| 欧美巨大巨粗黑人性aaaaaa| 亚洲av无码久久寂寞少妇| 99www久久综合久久爱com| 欧洲人激情毛片无码视频| 肉色欧美久久久久久久免费看| 亚洲欧美日韩国产成人一区| 天堂www中文在线资源| 久久久受www免费人成| 小sao货水好多真紧h视频| 免费无码一区二区三区a片| 精品久久久久久777米琪桃花| 久久国产福利播放| 国产玖玖玖九九精品视频靠爱| 国产69精品久久久久乱码免费| 天天av天天爽无码中文| 亚洲精品少妇高清30p| 潮喷大喷水系列无码久久精品| 亚洲精品国产摄像头| 熟妇人妻av中文字幕老熟妇| 成人做爰视频www网站小优视频| 四虎永久在线精品免费下载| 一区二区免费视频中文乱码| 亚洲午夜无码久久| 亚洲av综合av一区| 真实国产熟睡乱子伦视频| 草草久久97超级碰碰碰| 国产高清一区二区三区视频| 国产精品久久久久这里只有精品| 曰本无码人妻丰满熟妇啪啪| 成人一区二区免费视频|