经典C++程序Word格式.docx
《经典C++程序Word格式.docx》由会员分享,可在线阅读,更多相关《经典C++程序Word格式.docx(37页珍藏版)》请在冰豆网上搜索。
,2000);
Employeee2("
zhang"
3000);
Employeee3("
hong"
2500);
e3.print();
2.由父类图形派生矩形、圆形、三角形三个子类,父类中声明了求面积的函数,在各子类中重写各自的构造函数、面积函数,但面积函数要保持相同的函数名,即达到面积函数的多态.分别声明对象进行检验.
Shape.h
classshape
shape(void);
~shape(void);
voidgetArea();
classrectangle:
publicshape
rectangle(inti,intj);
voidgetRec();
intx,y;
intarea;
classcircle:
circle(inti);
voidgetCir();
intr;
doublearea;
classtriangle:
publicshape//等边三角形
triangle(inti);
voidgetTri();
inta;
Shape0.cpp
shape.h"
rectangle:
rectangle(inti,intj)
x=i;
y=j;
}
voidrectangle:
getRec()
rectangle'
slength="
x<
rectangle'
swidth="
y<
getArea()
area=x*y;
sarea="
area<
circle:
circle(inti)
r=i;
voidcircle:
getCir()
circle'
sradius="
r<
area=3.14*r*r;
triangle:
triangle(inti)
a=i;
voidtriangle:
getTri()
triangle'
a<
area=0.433*a*a;
Shape.cpp
shape:
shape(void)
~shape(void)
rectanglerec(4,5);
rec.getRec();
rec.getArea();
circlecir(6);
cir.getCir();
cir.getArea();
triangletri(3);
tri.getTri();
tri.getArea();
3.对象数组,以学生成绩为例
Classstu.h
classclassstu
classstu(void);
~classstu(void);
voidset(inti,char*a,floats);
voidprint();
//private:
intid;
floatscore;
Classstu.cpp
classstu.h"
classstu:
classstu(void)
~classstu(void)
voidclassstu:
set(inti,char*c,floats)
id=i;
strcpy_s(name,c);
score=s;
print()
学号:
id<
姓名:
name<
成绩:
score<
Main.cpp
classstustu[4];
stu[0].set(1,"
aa"
33);
stu[1].set(2,"
bb"
32);
stu[2].set(3,"
cc"
48);
stu[3].set(4,"
dd"
25);
stu[0].print();
stu[1].print();
stu[2].print();
stu[3].print();
for(inti=0;
i<
3;
i++)
if(stu[i].score>
stu[i+1].score)
stu[i+1]=stu[i];
cout<
thehighestis"
stu[3].score<
//8.5拷贝构造函数与赋值运算符(=)有何联系与区别?
#include<
stdafx.h"
classPoint
intm_x,m_y;
Point(intx=0,inty=0)
m_x=x;
m_y=y;
Point(Point&
obj)
m_x=obj.m_x;
m_y=obj.m_y;
voidprint()
m_x<
"
m_y<
Pointa(2,3);
//调用一般构造函数
Pointb(a);
//调用拷贝构造函数
Pointc=a;
//等价于c(a),调用拷贝构造函数,创建对象并赋值
Pointd;
//调用一般构造函数
d=a;
//使用赋值运算符,不重建创建对象
a.print();
b.print();
c.print();
d.print();
//8.6能否给对象数组赋初值
Point(intx=0,inty=0){m_x=x;
m_y=y;
Pointarr[2]={Point(1,1),Point(2,2)};
//能给对象数组赋初值
for(inti=0;
2;
arr[i].print();
//8.15分析程序的输出结果,构造函数与析构函数
classA
A();
A(inti,intj);
~A();
voidSet(inti,intj)
{a=i;
b=j;
inta,b;
A:
A()
a=0;
b=0;
Defaultconstructorcalled."
A(inti,intj)
{
a=i;
Constructora="
b="
b<
~A()
Destructorcalled.a="
Starting1..."
Aa[3];
i<
i++)
a[i].Set(2*i+1,(i+1)*2);
Ending1..."
Starting2..."
Ab[3]={A(7,8),A(9,10),A(11,12)};
Ending2..."
/*
//输出结果
Starting1...
Defaultconstructorcalled.
Ending1...
Starting2...
Constructora=7,b=8
Constructora=9,b=10
Constructora=11,b=12
Ending2...
Destructorcalled.a=11,b=12
Destructorcalled.a=9,b=10
Destructorcalled.a=7,b=28
Destructorcalled.a=5,b=6
Destructorcalled.a=3,b=4
Destructorcalled.a=1,b=2
*/
//8.17创建一个Triangle类,这个类将直角三角形的底边长度和高作为私有成员。
类中包含设置
//这些值的构造函数。
两个成员函数:
hypot()返回直角三角形斜边的长度,area()返回三角形的面积。
cmath>
classTriangle
Triangle(floatL,floatH)
Length=L;
Hight=H;
floathypot()
{returnsqrt(Length*Length+Hight*Hight);
floatarea()
{returnLength*Hight/2;
floatLength;
floatHight;
Trianglet(3,4);
t.hypot()<
t.area()<
//8.18定义一个Circle类,包含数据成员Radius(半径)和计算周长和面积的成员函数,并构
//造Circle的对象进行测试。
constfloatPI=3.14159;
classCircle
Circle(floatr)
{
radius=r;
floatperimeter()
return2*PI*radius;
returnPI*radius*radius;
floatradius;
Circlec1(3.);
c1.perimeter()<
c1.area()<
自己编的:
classcircle
circle(intr)
rad=r;
doublearea()
return3.14*rad*rad;
intrad;
circlec
(1);
c.area()<
//8.20设计一个用于人事管理的Person(人员)组合类。
人员属性为:
number(编号)、sex(性别),
//birthday(出生日期)、id(身份证号)等。
其中“出生日期”定义为一个“日期”类内嵌对象。
//用成员函数实现对人员信息的录入和显示。
要求具有构造函数、析构函数、拷贝构造函数、内
//联成员函数、带缺省形式参数值的成员函数。
cstring>
classDate
Date(inty=1900,intm=1,intd=1)
year=y;
month=m;
day=d;
voidOutput()
year<
/"
month<
day<
intyear;
intmonth;
intday;
classPerson
Person(Dated=Date(1993,1,1),intn=0,char*s="
NoName"
boolb=0):
birthday(d)
number=n;
name=newchar[strlen(s)+1];
if(name!
=NULL)
strcpy(name,s);
sex=b;
Person(Person&
p)
number=p.number;
name=newchar[strlen(p.name)+1];
strcpy(name,p.name);
sex=p.sex;
birthday=p.birthday;
~Person()
delete[]name;
name=NULL;
voidInput();
number="
number;
cout<
name="
name;
sex="
sex;
birthday="
;
birthday.Output();
intnumber;
char*name;
boolsex;
Datebirthday;
voidPerson:
Input()
Pleaseinputthenumber:
cin>
>
Pleaseinputthename:
Pleaseinputthesex:
(0or1)"
Pleaseinputthebirthday(year/month/day):
inty,m,d;
y>
m>
d;
birthday=Date(y,m,d);
Personp1;
Personp2(p1);
p1.Input();
p1.Output();
p2.Output();
Personp3(Date(1998,12,12),1,"
zhangsan"
1);
p3.Output();
数组和指针
1.已知一个数组a[10],并在其中保存了下列数据:
6、12、34、56、78、89、90、409、800、2300
要求:
(1)从键盘上任意输入一个数,并将该数插入到数组的合适位置。
(要求:
用指针完成)。
(2)打印出插入前和插入后的数组内容。
inta[10]={6,12,34,56,78,89,90,409,800,2300};
intb,c;
请输入一个数:
b;
请输入想插入的位置(数组的哪个元素-9)"
c;
intd[11];
int*pa=a;
int*pb=d;
for(intj=0;
j<
j++)//对数组b赋值
*pb++=*pa++;
pb=d;
*(pb+c)=b;
for(intk=c+1;
k<
11;
k++)
*(pb+k)=a[k-1];
插入前的数组是:
//输出数组
for(intm=0;
m<
10;
m++)
a[m]<
插入后的数组是:
*(pb+i)<
用指针实现字符串顺序交换
chars[]="
abcdefghijklmnopqrstuvwxyz"
charch,*t=&
s[strlen(s)-1];
for(inti=0;
(strlen(s)-1)/2;
ch=s[i];
s[i]=*(t-i);
*(t-i)=ch;
for(intk=0;
strlen(s);
k++)//可以直接写成:
s;
s[k];
//省略
普通转换,调换字符串顺序
chars[10]="
student"
t;
inti=0,j=strlen(s)-1;
while(i<
j)
t=s[i];
s[i]=s[j];
s[j]=t;
i++;
j--;
s<
将十进制转换成其他进制(小于十进制)
intn,b,a[20];
n>
0;
a[i]=n%b;
n/=b;
for(intj=i-1;
j>
=0;
j--)
a[j];
运算符?
?
iostream.h>
classA{
A():
a(0){}
A&
operator++()
a++;
return*this;
}
Aoperator++(int)
Atemp(*this);
a++;
returntemp;
voiddisplay(){cout<
protected:
inta;
voidmain(){
Aa;
(++a).display();
a++.display();
二维数组转换为一维数组
longsum_array(intarray[],intelements)