1. 面向?qū)ο蠓椒ǖ闹饕攸c是將___方法________和__屬性_________封裝在一起。

成都創(chuàng)新互聯(lián)是一家專注于網(wǎng)站建設(shè)、網(wǎng)站設(shè)計與策劃設(shè)計,水富網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10余年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:水富等地區(qū)。水富做網(wǎng)站價格咨詢:13518219792
2. 面向?qū)ο笾械某橄蠓譃開_____方法_____抽象和____屬性_______抽象,其封裝是通過定義
___對象________來實現(xiàn)的
3. 在C++語言中,字符串常量"I love visual C++ 6.0.\n"的長度是_____23______。
4. 已知數(shù)組e 定義為int e[ ][4]={{1,2,3,4},{5,6,7,8}};則e 是一個__2_______行_________4
列的二維數(shù)組,總共有_____8______個元素,最大行下標是___1________,最大列下標是
3___________,其首行的各元素的值分別是_1234__________。
5. 執(zhí)行下列語句序列后,數(shù)組str2 中的字符串是__ABCD_________
char str1[ ]="ABCD",str2[10]="XYZxyz";
for(int i=0;str2[i]=str1[i];i++);
6. 在C++中每條預(yù)處理指令都必須以_#_________開頭;可以用預(yù)處理指令_____ #undef ___
終止符號常量和宏的作用;每一條#if 結(jié)構(gòu)都用___#endif_______結(jié)束。
7. 若有int a[6],*p=a;,則數(shù)組元素a[3]可以表示為*(p+____2______ ) 或p[____2_____]。
8. 有如下結(jié)構(gòu)體的定義:
struct AA{
int *a,b;
char c;
};
則sizeof(AA)的值是_____12______。
9.若類Sample 中只有如下幾個數(shù)據(jù)成員:const float f,const char c,則其構(gòu)造函數(shù)應(yīng)
定義為____ Sample ():f(0),c(‘0’){} 只能在構(gòu)造函數(shù)初始化列表中初始化_________________ ____________
10. 如果派生類中沒有給出純虛函數(shù)的具體實現(xiàn),這個派生類仍然是一個____抽象類_______。
11. 下面的程序向C 盤的new 文件寫入內(nèi)容,然后把該內(nèi)容顯示出來,試完成該程序。
#include fstream.h
void main()
{
char str[100];
fstream f;
f.open("c:\\new",ios::in|ios::out,0) ___________ ;
f"China ShangHai";
f.put('\n');
f.seekg(0);
while(____!f.eof()____ )
{ f.getline(str,100); coutstr; }
______f.close()_____ ;
}
12. 異常處理中,如果沒有匹配所拋出的對象類型的catch 語句塊,這時系統(tǒng)調(diào)用默認
_____terminate函數(shù)______終止程序。
1.第20行中直接書寫這個語句,只打印gcd函數(shù)中的輸出部分,雖然也能得到返回值,但不會打印返回值。并不是不能得到返回值。
2.printf("%d",gcd(x,y)運行過程:先運行函數(shù)gcd(),當然運行過程中,函數(shù)內(nèi)包含的打印語句照樣全部打印;最后再輸出gcd函數(shù)得到的返回值。并不是只打印返回值。
3.如果不要求函數(shù)可以輸出形參值a和b以便觀察函數(shù)gcd()的遞歸計算過程,圖二寫法也是正確的。第5行和第7行沒有else也是對的,是因為兩個return語句與if語句完美配合,間接實現(xiàn)了分支語句的全部功能。
類是編程人員表達自定義數(shù)據(jù)類型的C++機制。它和C語言中的結(jié)構(gòu)類似,C++類
支持數(shù)據(jù)抽象和面向?qū)ο蟮某绦蛟O(shè)計,從某種意義上說,也就是數(shù)據(jù)類型的設(shè)
計和實現(xiàn)。
一、類的設(shè)計
1.類的聲明
class 類名
{
private: //私有
...
public: //公有
...
};
2.類的成員
一般在C++類中,所有定義的變量和函數(shù)都是類的成員。如果是變量,我們就叫
它數(shù)據(jù)成員如果是函數(shù),我們就叫它成員函數(shù)。
3.類成員的可見性
private和public訪問控制符決定了成員的可見性。由一個訪問控制符設(shè)定的可
訪問狀態(tài)將一直持續(xù)到下一個訪問控制符出現(xiàn),或者類聲明的結(jié)束。私有成員
僅能被同一個類中的成員函數(shù)訪問,公有成員既可以被同一類中的成員函數(shù)訪
問,也可以被其他已經(jīng)實例化的類中函數(shù)訪問。當然,這也有例外的情況,這
是以后要討論的友元函數(shù)。
類中默認的數(shù)據(jù)類型是private,結(jié)構(gòu)中的默認類型是public。一般情況下,變
量都作為私有成員出現(xiàn),函數(shù)都作為公有成員出現(xiàn)。
類中還有一種訪問控制符protected,叫保護成員,以后再說明。
4.初始化
在聲明一個類的對象時,可以用圓括號()包含一個初始化表。
看下面一個例子:
#include iostream.h
class Box
{
private:
int height,width,depth; //3個私有數(shù)據(jù)成員
public:
Box(int,int,int);
~Box();
int volume(); //成員函數(shù)
};
Box::Box(int ht,int wd,int dp)
{
height=ht;
width=wd;
depth=dp;
}
Box::~Box()
{
//nothing
}
int Box::volume()
{
return height*width*depth;
}
int main()
{
Box thisbox(3,4,5); //聲明一個類對象并初始化
cout return 0;
}
當一個類中沒有private成員和protected成員時,也沒有虛函數(shù),并且不是從
其他類中派生出來的,可以用{}來初始化。(以后再講解)
5.內(nèi)聯(lián)函數(shù)
內(nèi)聯(lián)函數(shù)和普通函數(shù)的區(qū)別是:內(nèi)聯(lián)函數(shù)是在編譯過程中展開的。通常內(nèi)聯(lián)函
數(shù)必須簡短。定義類的內(nèi)聯(lián)函數(shù)有兩種方法:一種和C語言一樣,在定義函數(shù)時
使用關(guān)鍵字inline。如:
inline int Box::volume()
{
return height*width*depth;
}
還有一種方法就是直接在類聲明的內(nèi)部定義函數(shù)體,而不是僅僅給出一個函數(shù)
原型。我們把上面的函數(shù)簡化一下:
#include iostream.h
class Box
{
private:
int height,width,depth;
public:
Box(int ht,int wd,int dp)
{
height=ht;
width=wd;
depth=dp;
}
~Box();
int volume()
{
return height*width*depth;
}
};
int main()
{
Box thisbox(3,4,5); //聲明一個類對象并初始化
cout return 0;
}
這樣,兩個函數(shù)都默認為內(nèi)聯(lián)函數(shù)了。
樓主真是太有緣了,我也正學數(shù)據(jù)結(jié)構(gòu),這是老師給我們提供的源代碼,希望有用
Status MakeNode(Link *p,ElemType e)
{ /* 分配由p指向的值為e的結(jié)點,并返回OK;若分配失敗。則返回ERROR */
*p=(Link)malloc(sizeof(LNode));
if(!*p)
return ERROR;
(*p)-data=e;
return OK;
}
void FreeNode(Link *p)
{ /* 釋放p所指結(jié)點 */
free(*p);
*p=NULL;
}
Status InitList(LinkList *L)
{ /* 構(gòu)造一個空的線性鏈表 */
Link p;
p=(Link)malloc(sizeof(LNode)); /* 生成頭結(jié)點 */
if(p)
{
p-next=NULL;
(*L).head=(*L).tail=p;
(*L).len=0;
return OK;
}
else
return ERROR;
}
Status ClearList(LinkList *L)
{ /* 將線性鏈表L重置為空表,并釋放原鏈表的結(jié)點空間 */
Link p,q;
if((*L).head!=(*L).tail)/* 不是空表 */
{
p=q=(*L).head-next;
(*L).head-next=NULL;
while(p!=(*L).tail)
{
p=q-next;
free(q);
q=p;
}
free(q);
(*L).tail=(*L).head;
(*L).len=0;
}
return OK;
}
Status DestroyList(LinkList *L)
{ /* 銷毀線性鏈表L,L不再存在 */
ClearList(L); /* 清空鏈表 */
FreeNode((*L).head);
(*L).tail=NULL;
(*L).len=0;
return OK;
}
Status InsFirst(LinkList *L,Link h,Link s) /* 形參增加L,因為需修改L */
{ /* h指向L的一個結(jié)點,把h當做頭結(jié)點,將s所指結(jié)點插入在第一個結(jié)點之前 */
s-next=h-next;
h-next=s;
if(h==(*L).tail) /* h指向尾結(jié)點 */
(*L).tail=h-next; /* 修改尾指針 */
(*L).len++;
return OK;
}
Status DelFirst(LinkList *L,Link h,Link *q) /* 形參增加L,因為需修改L */
{ /* h指向L的一個結(jié)點,把h當做頭結(jié)點,刪除鏈表中的第一個結(jié)點并以q返回。 */
/* 若鏈表為空(h指向尾結(jié)點),q=NULL,返回FALSE */
*q=h-next;
if(*q) /* 鏈表非空 */
{
h-next=(*q)-next;
if(!h-next) /* 刪除尾結(jié)點 */
(*L).tail=h; /* 修改尾指針 */
(*L).len--;
return OK;
}
else
return FALSE; /* 鏈表空 */
}
Status Append(LinkList *L,Link s)
{ /* 將指針s(s-data為第一個數(shù)據(jù)元素)所指(彼此以指針相鏈,以NULL結(jié)尾)的 */
/* 一串結(jié)點鏈接在線性鏈表L的最后一個結(jié)點之后,并改變鏈表L的尾指針指向新 */
/* 的尾結(jié)點 */
int i=1;
(*L).tail-next=s;
while(s-next)
{
s=s-next;
i++;
}
(*L).tail=s;
(*L).len+=i;
return OK;
}
Position PriorPos(LinkList L,Link p)
{ /* 已知p指向線性鏈表L中的一個結(jié)點,返回p所指結(jié)點的直接前驅(qū)的位置 */
/* 若無前驅(qū),則返回NULL */
Link q;
q=L.head-next;
if(q==p) /* 無前驅(qū) */
return NULL;
else
{
while(q-next!=p) /* q不是p的直接前驅(qū) */
q=q-next;
return q;
}
}
Status Remove(LinkList *L,Link *q)
{ /* 刪除線性鏈表L中的尾結(jié)點并以q返回,改變鏈表L的尾指針指向新的尾結(jié)點 */
Link p=(*L).head;
if((*L).len==0) /* 空表 */
{
*q=NULL;
return FALSE;
}
while(p-next!=(*L).tail)
p=p-next;
*q=(*L).tail;
p-next=NULL;
(*L).tail=p;
(*L).len--;
return OK;
}
Status InsBefore(LinkList *L,Link *p,Link s)
{ /* 已知p指向線性鏈表L中的一個結(jié)點,將s所指結(jié)點插入在p所指結(jié)點之前, */
/* 并修改指針p指向新插入的結(jié)點 */
Link q;
q=PriorPos(*L,*p); /* q是p的前驅(qū) */
if(!q) /* p無前驅(qū) */
q=(*L).head;
s-next=*p;
q-next=s;
*p=s;
(*L).len++;
return OK;
}
Status InsAfter(LinkList *L,Link *p,Link s)
{ /* 已知p指向線性鏈表L中的一個結(jié)點,將s所指結(jié)點插入在p所指結(jié)點之后, */
/* 并修改指針p指向新插入的結(jié)點 */
if(*p==(*L).tail) /* 修改尾指針 */
(*L).tail=s;
s-next=(*p)-next;
(*p)-next=s;
*p=s;
(*L).len++;
return OK;
}
Status SetCurElem(Link p,ElemType e)
{ /* 已知p指向線性鏈表中的一個結(jié)點,用e更新p所指結(jié)點中數(shù)據(jù)元素的值 */
p-data=e;
return OK;
}
ElemType GetCurElem(Link p)
{ /* 已知p指向線性鏈表中的一個結(jié)點,返回p所指結(jié)點中數(shù)據(jù)元素的值 */
return p-data;
}
Status ListEmpty(LinkList L)
{ /* 若線性鏈表L為空表,則返回TRUE,否則返回FALSE */
if(L.len)
return FALSE;
else
return TRUE;
}
int ListLength(LinkList L)
{ /* 返回線性鏈表L中元素個數(shù) */
return L.len;
}
Position GetHead(LinkList L)
{ /* 返回線性鏈表L中頭結(jié)點的位置 */
return L.head;
}
Position GetLast(LinkList L)
{ /* 返回線性鏈表L中最后一個結(jié)點的位置 */
return L.tail;
}
Position NextPos(Link p)
{ /* 已知p指向線性鏈表L中的一個結(jié)點,返回p所指結(jié)點的直接后繼的位置 */
/* 若無后繼,則返回NULL */
return p-next;
}
Status LocatePos(LinkList L,int i,Link *p)
{ /* 返回p指示線性鏈表L中第i個結(jié)點的位置,并返回OK,i值不合法時返回ERROR */
/* i=0為頭結(jié)點 */
int j;
if(i0||iL.len)
return ERROR;
else
{
*p=L.head;
for(j=1;j=i;j++)
*p=(*p)-next;
return OK;
}
}
Position LocateElem(LinkList L,ElemType e,Status (*compare)(ElemType,ElemType))
{ /* 返回線性鏈表L中第1個與e滿足函數(shù)compare()判定關(guān)系的元素的位置, */
/* 若不存在這樣的元素,則返回NULL */
Link p=L.head;
do
p=p-next;
while(p!(compare(p-data,e))); /* 沒到表尾且沒找到滿足關(guān)系的元素 */
return p;
}
Status ListTraverse(LinkList L,void(*visit)(ElemType))
{ /* 依次對L的每個數(shù)據(jù)元素調(diào)用函數(shù)visit()。一旦visit()失敗,則操作失敗 */
Link p=L.head-next;
int j;
for(j=1;j=L.len;j++)
{
visit(p-data);
p=p-next;
}
printf("\n");
return OK;
}
Status OrderInsert(LinkList *L,ElemType e,int (*comp)(ElemType,ElemType))
{ /* 已知L為有序線性鏈表,將元素e按非降序插入在L中。(用于一元多項式) */
Link o,p,q;
q=(*L).head;
p=q-next;
while(p!=NULLcomp(p-data,e)0) /* p不是表尾且元素值小于e */
{
q=p;
p=p-next;
}
o=(Link)malloc(sizeof(LNode)); /* 生成結(jié)點 */
o-data=e; /* 賦值 */
q-next=o; /* 插入 */
o-next=p;
(*L).len++; /* 表長加1 */
if(!p) /* 插在表尾 */
(*L).tail=o; /* 修改尾結(jié)點 */
return OK;
}
Status LocateElemP(LinkList L,ElemType e,Position *q,int(*compare)(ElemType,ElemType))
{ /* 若升序鏈表L中存在與e滿足判定函數(shù)compare()取值為0的元素,則q指示L中 */
/* 第一個值為e的結(jié)點的位置,并返回TRUE;否則q指示第一個與e滿足判定函數(shù) */
/* compare()取值0的元素的前驅(qū)的位置。并返回FALSE。(用于一元多項式) */
Link p=L.head,pp;
do
{
pp=p;
p=p-next;
}while(p(compare(p-data,e)0)); /* 沒到表尾且p-data.expne.expn */
if(!p||compare(p-data,e)0) /* 到表尾或compare(p-data,e)0 */
{
*q=pp;
return FALSE;
}
else /* 找到 */
{
*q=p;
return TRUE;
}
}
typedef struct LNode /* 結(jié)點類型 */
{
ElemType data;
struct LNode *next;
}LNode,*Link,*Position;
typedef struct LinkList /* 鏈表類型 */
{
Link head,tail; /* 分別指向線性鏈表中的頭結(jié)點和最后一個結(jié)點 */
int len; /* 指示線性鏈表中數(shù)據(jù)元素的個數(shù) */
}LinkList;
typedef LinkList polynomial;
#define DestroyPolyn DestroyList /* 與bo2-6.cpp中的函數(shù)同義不同名 */
#define PolynLength ListLength /* 與bo2-6.cpp中的函數(shù)同義不同名 */
Status OrderInsertMerge(LinkList *L,ElemType e,int(* compare)(term,term))
{ /* 按有序判定函數(shù)compare()的約定,將值為e的結(jié)點插入或合并到升序鏈表L的適當位置 */
Position q,s;
if(LocateElemP(*L,e,q,compare)) /* L中存在該指數(shù)項 */
{
q-data.coef+=e.coef; /* 改變當前結(jié)點系數(shù)的值 */
if(!q-data.coef) /* 系數(shù)為0 */
{ /* 刪除多項式L中當前結(jié)點 */
s=PriorPos(*L,q); /* s為當前結(jié)點的前驅(qū) */
if(!s) /* q無前驅(qū) */
s=(*L).head;
DelFirst(L,s,q);
FreeNode(q);
}
return OK;
}
else /* 生成該指數(shù)項并插入鏈表 */
if(MakeNode(s,e)) /* 生成結(jié)點成功 */
{
InsFirst(L,q,s);
return OK;
}
else /* 生成結(jié)點失敗 */
return ERROR;
}
int cmp(term a,term b) /* CreatPolyn()的實參 */
{ /* 依a的指數(shù)值、=或b的指數(shù)值,分別返回-1、0或+1 */
if(a.expn==b.expn)
return 0;
else
return (a.expn-b.expn)/abs(a.expn-b.expn);
}
void CreatPolyn(polynomial *P,int m) /* 算法2.22 */
{ /* 輸入m項的系數(shù)和指數(shù),建立表示一元多項式的有序鏈表P */
Position q,s;
term e;
int i;
InitList(P);
printf("請依次輸入%d個系數(shù),指數(shù):\n",m);
for(i=1;i=m;++i)
{ /* 依次輸入m個非零項(可按任意順序) */
scanf("%f,%d",e.coef,e.expn);
if(!LocateElemP(*P,e,q,cmp)) /* 當前鏈表中不存在該指數(shù)項,cmp是實參 */
if(MakeNode(s,e)) /* 生成結(jié)點并插入鏈表 */
InsFirst(P,q,s);
}
}
void PrintPolyn(polynomial P)
{ /* 打印輸出一元多項式P */
Link q;
q=P.head-next; /* q指向第一個結(jié)點 */
printf(" 系數(shù) 指數(shù)\n");
while(q)
{
printf("%f %d\n",q-data.coef,q-data.expn);
q=q-next;
}
}
void AddPolyn(polynomial *Pa,polynomial *Pb) /* 算法2.23 */
{ /* 多項式加法:Pa=Pa+Pb,并銷毀一元多項式Pb */
Position ha,hb,qa,qb;
term a,b;
ha=GetHead(*Pa);
hb=GetHead(*Pb); /* ha和hb分別指向Pa和Pb的頭結(jié)點 */
qa=NextPos(ha);
qb=NextPos(hb); /* qa和qb分別指向Pa和Pb中當前結(jié)點(現(xiàn)為第一個結(jié)點) */
while(!ListEmpty(*Pa)!ListEmpty(*Pb)qa)
{ /* Pa和Pb均非空且ha沒指向尾結(jié)點(qa!=0) */
a=GetCurElem(qa);
b=GetCurElem(qb); /* a和b為兩表中當前比較元素 */
switch(cmp(a,b))
{
case -1:ha=qa; /* 多項式Pa中當前結(jié)點的指數(shù)值小 */
qa=NextPos(ha); /* ha和qa均向后移一個結(jié)點 */
break;
case 0: qa-data.coef+=qb-data.coef;
/* 兩者的指數(shù)值相等,修改Pa當前結(jié)點的系數(shù)值 */
if(qa-data.coef==0) /* 刪除多項式Pa中當前結(jié)點 */
{
DelFirst(Pa,ha,qa);
FreeNode(qa);
}
else
ha=qa;
DelFirst(Pb,hb,qb);
FreeNode(qb);
qb=NextPos(hb);
qa=NextPos(ha);
break;
case 1: DelFirst(Pb,hb,qb); /* 多項式Pb中當前結(jié)點的指數(shù)值小 */
InsFirst(Pa,ha,qb);
ha=ha-next;
qb=NextPos(hb);
}
}
if(!ListEmpty(*Pb))
{
(*Pb).tail=hb;
Append(Pa,qb); /* 鏈接Pb中剩余結(jié)點 */
}
DestroyPolyn(Pb); /* 銷毀Pb */
}
void AddPolyn1(polynomial *Pa,polynomial *Pb)
{ /* 另一種多項式加法的算法:Pa=Pa+Pb,并銷毀一元多項式Pb */
Position qb;
term b;
qb=GetHead(*Pb); /* qb指向Pb的頭結(jié)點 */
qb=qb-next; /* qb指向Pb的第一個結(jié)點 */
while(qb)
{
b=GetCurElem(qb);
OrderInsertMerge(Pa,b,cmp);
qb=qb-next;
}
DestroyPolyn(Pb); /* 銷毀Pb */
}
void Opposite(polynomial Pa)
{ /* 一元多項式系數(shù)取反 */
Position p;
p=Pa.head;
while(p-next)
{
p=p-next;
p-data.coef*=-1;
}
}
void SubtractPolyn(polynomial *Pa,polynomial *Pb)
{ /* 多項式減法:Pa=Pa-Pb,并銷毀一元多項式Pb */
Opposite(*Pb);
AddPolyn(Pa,Pb);
}
void MultiplyPolyn(polynomial *Pa,polynomial *Pb)
{ /* 多項式乘法:Pa=PaPb,并銷毀一元多項式Pb */
polynomial Pc;
Position qa,qb;
term a,b,c;
InitList(Pc);
qa=GetHead(*Pa);
qa=qa-next;
while(qa)
{
a=GetCurElem(qa);
qb=GetHead(*Pb);
qb=qb-next;
while(qb)
{
b=GetCurElem(qb);
c.coef=a.coef*b.coef;
c.expn=a.expn+b.expn;
OrderInsertMerge(Pc,c,cmp);
qb=qb-next;
}
qa=qa-next;
}
DestroyPolyn(Pb); /* 銷毀Pb */
ClearList(Pa); /* 將Pa重置為空表 */
(*Pa).head=Pc.head;
(*Pa).tail=Pc.tail;
(*Pa).len=Pc.len;
}
當前標題:c語言構(gòu)造函數(shù)例題 c語言 構(gòu)造類型
文章URL:http://www.chinadenli.net/article38/dddpdpp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站制作、電子商務(wù)、網(wǎng)站改版、營銷型網(wǎng)站建設(shè)、微信公眾號
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)