C++实例代码附有解释.docx
《C++实例代码附有解释.docx》由会员分享,可在线阅读,更多相关《C++实例代码附有解释.docx(43页珍藏版)》请在冰豆网上搜索。
C++实例代码附有解释
第一题
#include
classStack//定义堆栈类
{
structNode
{
intcontent;
Node*next;
}*top;
public:
Stack(){top=NULL;}//构造函数的定义
boolpush(inti);//压栈成员函数的声明
boolpop(int&i);//弹栈成员函数的声明
};
boolStack:
:
push(inti)//压栈成员函数的定义
{
Node*p=newNode;
if(p==NULL)
{
cout<<"Stackisoverflow.\n";
returnfalse;
}
else
{
p->content=i;
p->next=top;
top=p;
returntrue;
}
}
boolStack:
:
pop(int&i)//弹栈成员函数的定义
{
if(top==NULL)
{
cout<<"Stackisempty.\n";
returnfalse;
}
else
{
Node*p=top;
top=top->next;
i=p->content;
deletep;
returntrue;
}
}
voidmain()
{
Stackst1,st2;//定义对象st1和st2
intx;
for(inti=1;i<=5;i++)
{
st1.push(i);//压栈成员函数的调用
st2.push(i);//压栈成员函数的调用
}
cout<<"stack1:
"<for(i=1;i<=3;i++)
{
st1.pop(x);//弹栈成员函数的调用
cout<}
st1.push(20);
for(i=1;i<=4;i++)
{
if(st1.pop(x))
cout<else
break;
}
cout<<"stack2:
"<while(st2.pop(x))
cout<}
第二题
#include//使用名空间std,则必须去掉.h扩展名
usingnamespacestd;
voidmain()
{charname[10];
intage;
cout<<"pleaseinputyourname:
";
cin>>name;
cout<<"Howoldareyou:
";
cin>>age;
cout<<"nameis"<cout<<"ageis"<}
第三题
#include
usingnamespacestd;
voidmain()
{
structstudent
{
intno;
floatmath;
};
intn;
cin>>n;
studentwang;
//C++中变量的定义语句可以出现在程序的任意位置;可以使用结构体名定义变量
wang.no=n;
cin>>wang.math;
cout<}
第四题
#include
usingnamespacestd;
voidmain()
{
int*p;
p=newint;//分配内存空间
*p=5;
cout<<*p;
deletep;//释放内存空间
}
第五题
#include
usingnamespacestd;
voidmain()
{
intn;//定义数组元素的个数
int*p;
cout<<"pleaseinputthelengthofthearray:
";
cin>>n;
if((p=newint[n])==0)
{
cout<<"can'tallocatemorememory,terminating."<exit
(1);
}//分配内存空间
for(inti=0;ip[i]=i*2;
cout<<"Nowoutputthearray:
"<for(i=0;icout<
cout<delete[]p;//释放内存空间
}
第六题
#include
voidmain()
{
intnum=50;
int&ref=num;
ref+=10;
cout<<"num="<cout<<"ref="<num+=40;
cout<<"num="<cout<<"ref="<}
第七题
#include
voidmain()
{
intnum;
int&ref=num;
num=5;
cout<<"num="<cout<<"ref="<cout<<"&num="<<&num<cout<<"&ref="<<&ref<}
第八题
#include
usingnamespacestd;
voidswap(int&x,int&y);
voidmain()
{
intx=5,y=6;
cout<<"beforeswap,x:
"<"<swap(x,y);
cout<<"afterswap,x:
"<"<}
voidswap(int&rx,int&ry)//引用作为形参
{
inttemp=rx;
rx=ry;
ry=temp;
}
第九题
#include
usingnamespacestd;
intarray[6][4]={{60,80,90,75},
{75,85,65,77},
{80,88,90,98},
{89,100,78,81},
{62,68,69,75},
{85,85,77,91}};
int&level(intgrade[],intsize,int&tA,int&tB);
voidmain()
{
inttypeA=0,typeB=0;
intstudent=6;
intgradesize=4;
for(inti=0;ilevel(array[i],gradesize,typeA,typeB)++;//函数调用作为左值
cout<<"numberoftypeAis"<cout<<"numberoftypeBis"<}
int&level(intgrade[],intsize,int&tA,int&tB)
{
intsum=0;
for(inti=0;isum+=grade[i];
sum/=size;//平均分
if(sum>=80)
returntA;//A类学生
else
returntB;//B类学生
}
第十题
#include
usingnamespacestd;
float&fn2(floatr)
{
floattemp;
temp=r*r*3.14;
returntemp;//返回了局部变量
}
voidmain()
{
fn2(5.0)=12.4;
//返回的是局部作用域内的变量,函数调用作为左值使用。
此种情况应尽量避免。
}
第十题
#include
#include//使用字符串string类型的程序应包含头文件
usingnamespacestd;
voidmain()
{
strings,t;
cout<<"请输入一个字符串:
"<cin>>s;//由键盘输入一行文本,并把它赋给sring类型的变量s,注意:
//使用此方式输入的字符串中不能包含空白字符,具体请参见7.1.2小节
t="Ilikeprogramming!
";
cout<<"字符串的输出:
"<<
cout<")<}
第十一题
#include
usingnamespacestd;
inlinedoublecircumference(doubleradius);
//内联函数的声明,如果此处省略inline关键字,即使在函数定义时加上inline关键字,
//编译程序也不认为那是内联函数,对待该函数如普通函数那样,
//产生该函数的调用代码并进行连接。
voidmain()
{
doubler=3.0,s;
s=circumference(r);
cout<<"thecircumferenceis"<
}
inlinedoublecircumference(doubleradius)
//内联函数的定义,此处也可以省略inline关键字
{
return2*3.1415926*radius;
}
第十二题
#include
intadd(intx,inty)
{
intsum;
sum=x+y;
returnsum;
}
intadd(intx,inty,intz)
{
intsum;
sum=x+y+z;
returnsum;
}
voidmain()
{
inta,b;
a=add(5,10);
b=add(5,10,20);
cout<<"a="<cout<<"b="<
}
第十三题
#include
template
Tmin(Ta[],intn)
{
inti;
Tminv=a[0];
for(i=1;iif(minv>a[i])
minv=a[i];
returnminv;
}
voidmain()
{
inta[]={1,3,0,2,7,6,4,5,2};
doubleb[]={1.2,-3.4,6.8,9,8};
cout<<"a数组的最小值为:
"<cout<<"b数组的最小值为:
"<}
第十四题
#include
#definePI3.1415926535
template
doubleCircle_Square(Tx)
{
returnx*x*PI;
}
doubleCircle_Square(longx)
{
returnx*x*PI;
}
voidmain()
{
intr1=1;
doubler2=2.0;
longr3=3;
cout<<"Thefirstcirclesquareis"<<<"Thesecondcirclesquareis"<<<"Thethirdcirclesquareis"<}
第十五题
//tdate.h这个头文件只存放有关Tdate类的定义说明
#ifndefTdate_H//用来避免重复定义
#defineTdate_H//不是类的一部分
classTdate
{
public:
voidset(int,int,int);//成员函数原型
intisLeapYear();
voidprint();
private:
intmonth;
intday;
intyear;
};//Tdate类定义的结束
#endif//Tdate_H
//tdate.cpp类Tdate的实现部分
#include//因为tdate.cpp文件要访问运算符<<和stream类
//对象cout,而这二者都是定义在iostream类中的,所以包含iostream.h头文件。
#include"tdate.h"//包含用户自定义的头文件,该文件中提供了Tdate类的定义
voidTdate:
:
set(intm,intd,inty)
{
month=m;day=d;year=y;
}
intTdate:
:
isLeapYear()
{
return((year%4==0&&year%100!
=0)||(year%400==0));
}
voidTdate:
:
print()
{
cout<}
第十六题
//ch3_2.cpp
#include
#include"tdate.h"
voidsomeFunc(Tdate&refs)
{
refs.print();//通过对象的引用调用成员函数
if(refs.isLeapYear())//通过对象的引用调用成员函数
cout<<"error\n";
else
cout<<"right\n";
}
voidmain()//类的应用部分
{
Tdates,*pTdate=&s;//pTdate为指向Tdate类对象的指针
s.set(2,15,1998);//通过对象调用成员函数
pTdate->print();//通过指向对象的指针调用成员函数
if((*pTdate).isLeapYear())//通过指向对象的指针调用成员函数
cout<<"error\n";
else
cout<<"right\n";
someFunc(s);//对象的地址传给引用
}
第十七题
#include
constintSIZE=10;//存储的最多字符数
classCstack
{
private:
charstk[SIZE];
intposition;
public:
voidinit()
{
position=0;
}
charpush(charch);
charpop();
};
charCstack:
:
push(charch)
{
if(position==SIZE)
{
cout<<"\n栈已满\n";
return0;
}
stk[position++]=ch;
returnch;
};
charCstack:
:
pop()
{
if(position==0)
{
cout<<"\n栈已空"<return0;
}
returnstk[--position];
};
voidmain()
{
Cstacks;
s.init();
charch;
cout<<"请输入字符:
"<cin>>ch;
while(ch!
='#'&&s.push(ch))
cin>>ch;
cout<<"\n现在输出栈内数据\n";
while(ch=s.pop())
cout<}
第十八题
#include
classTdate{
public:
voidset(intm=5,intd=16,inty=1991)//置日期值
{
month=m;day=d;year=y;
}
voidprint()//输出日期值
{
cout<}
private:
intmonth;
intday;
intyear;
};
voidmain()
{
Tdatea,b,c;
a.set(4,12,1996);
b.set(3);
c.set(8,10);
a.print();
b.print();
c.print();
}
第十九题
#include
classcube
{
public:
intvolume(intht,intwd)
{
returnht*wd;
}
intvolume(intht,intwd,intdp)
{
height=ht;
width=wd;
depth=dp;
returnheight*width*depth;
}
private:
intheight,width,depth;
};
voidmain()
{
cubecube1;
cout<cout<}
二十题
#include
classqueue
{
intq[100];
intsloc,rloc;
public:
queue();
voidqput(inti);
intqget();
};
queue:
:
queue()
{
sloc=rloc=0;
cout<<"queueinitialized\n";
}
voidqueue:
:
qput(inti)
{
if(sloc==100)
{
cout<<"queueisfull\n";
return;
}
sloc++;
q[sloc]=i;
}
intqueue:
:
qget()
{
if(rloc==sloc)
{
cout<<"queueisempty\n";
return0;
}
rloc++;
returnq[rloc];
}
voidmain()
{
queuea,b;
a.qput(10);
b.qput(20);
a.qput(20);
b.qput(19);
cout<cout<cout<cout<}
二十一题
#include
classtest
{
private:
intnum;
floatf1;
public:
test();
test(intn,floatf);//参数化的构造函数
intgetint(){returnnum;}
floatgetfloat(){returnf1;}
};
test:
:
test()
{
cout<<"Initializingdefault"<num=0;
f1=0.0;
}
test:
:
test(intn,floatf)
{
cout<<"Initializing"<num=n;
f1=f;
}
voidmain()
{
testx;//调用无参的构造函数
testy(10,21.5);//调用带两个参数的构造函数
test*px=newtest;//调用无参的构造函数
test*py=newtest(10,21.5);//调用带两个参数的构造函数
}
二十二题
#include
classTdate{
public:
Tdate(intm=5,intd=16,inty=1990)
{
month=m;day=d;year=y;
cout<}
private:
intmonth;
intday;
intyear;
};
voidmain()
{
Tdateaday;
Tdatebday
(2);
Tdatecday(3,12);
Tdatedday(1,2,1998);
}
二十三题
#include
#include
usingnamespacestd;
classStudent{
public:
Student(char*pName)
{
cout<<"calloneparameterconstructor"<strncpy(name,pName,sizeof(name));
name[sizeof(name)-1]='\0';
cout<<"t