对象C++例.docx

上传人:b****8 文档编号:10279055 上传时间:2023-02-09 格式:DOCX 页数:36 大小:24.16KB
下载 相关 举报
对象C++例.docx_第1页
第1页 / 共36页
对象C++例.docx_第2页
第2页 / 共36页
对象C++例.docx_第3页
第3页 / 共36页
对象C++例.docx_第4页
第4页 / 共36页
对象C++例.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

对象C++例.docx

《对象C++例.docx》由会员分享,可在线阅读,更多相关《对象C++例.docx(36页珍藏版)》请在冰豆网上搜索。

对象C++例.docx

对象C++例

用类型说明的类型名,使用时不用冠以类型说明符

例1.

typedefenum{red,green,yellow}traffic_light_color

structintersection{

traffic_light_colortraffic_light;

intnumber_cars_queued;

intcumulative_num_cars

}

intersectionnetworks[50];

------------------------------------------------------------------------

枚举值转换为整型值是自动转换,而整型值转换为枚举值需要强制转换

例2

enumname{john,mike,rose,joan}

nameperson1=john;

nameperson2=1;

nameperson2=(enum,name);

------------------------------------------------------------------------

允许无名联合

例3.

union{

inti;

floatf;

};

------------------------------------------------------------------------

增加了作用域运算符:

例4.

charch;

main()

{

hide_identifider();

printf(“\n\nglobalvalueofoh=%c”,ch);

}

voidhide_identifier()

{

charch=’e’

printf(“\nthelocalvalueofch=%”,cj);

:

:

ch=’a’

}

输出结果为:

thelocalvalueofch=e

theglobalvalueofch=a

强制类型转换可采用函数形式

例5.

longl=(long)f;

可写作:

longl=long(f);

------------------------------------------------------------------------

增加了类型说明new和delete

例6.

voidcreat_string()

{

intnum_char;

printf(“howmanycharacterinyourfirst_name:

”;

scanf(“%d,&num_chars);

char*name=newchar[num_chars+1];

printf(“enteryourfirstname:

”);

scanf(“%s”,name);

printf(“\n\nyourfirstname,%s,isverynice!

”,name);

deletename;

}

------------------------------------------------------------------------

main()

{

create_string();

}

------------------------------------------------------------------------

关于函数部分的给边和扩充

原形函数

例7.

main()

{

inti=4,j=5;

function(i,j);

}

voidfunction(c,d)(原C语言的函数形式)

intc,d;

{

printf(“\nc=%d,d=%d,”c,d)

}

voidfunction(intc,intd)(C++语言的函数形式)

{

printf(“\nc=%d,d=%d,”c,d);

}

缺省参数的函数

例8.

voidfunc(inta=0,charb=’c’,intd=10)

{

}

下面的写法都允许

func(12)

func(12,‘w’)

func()

func(12,‘kk’,30)

------------------------------------------------------------------------

允许不限定参数个数的函数定义

例9.

intprint(char*…)

------------------------------------------------------------------------

内联函数说明

例10.

main()

{

inti=4,j=5;

inlinefunction(i,j);

}

voidfunction(inta,intb)

{

}

------------------------------------------------------------------------

关于函数调用市的参数传递——引用类型

例11.(用C语言写交换两个字符的函数)

voidswap(v1,v2)

int*v1,*v2;

{

inttemp;

temp=*v;

*v1=*v2,

*v2=temp;

}

main()

{

inti=7,j=8;

swap(&i,&j);

}

(用C++语言写交换两个字符的函数)

voidswap(int&v1,int&v2)

{

inttemp;

temp=v1;

v1=v2;

v2=temp

}

main()

{

inti=7,j=8;

swap(i,j);

….

}

------------------------------------------------------------------------

关于函数名重载

例12.(使用C语言的情况)

intcube(intnumber)

floatfcube(floatnumber)

doubledcube(doublenumber)

(使用C++语言的情况)

intcube(intnumber)

floatcube(floatnumber)

doublecube(doublenumber)

类、对象和消息

class<类名>{

[private:

<私有数据成员和函数成员表>]

[protected:

<保护数据成员和函数成员表>]

[public:

<公有数据成员和函数成员表>]

}[对象表];

------------------------------------------------------------------------

例1.(类的说明)

classpoint{

private:

intx;

inty;

public:

intgetx(){returnx;}

}

------------------------------------------------------------------------

classpoint{intx,y;

public:

intgetx();

};

intpoint:

:

getx(){returnx;}

------------------------------------------------------------------------

例2.(对象的定义)

pointorigin;

pointrow[80];

point*point_ptr;

vectormultiply(vector&v1,vector&v2)

{

}

------------------------------------------------------------------------

例3.(向对象发消息)

origin.getx();

point_ptr→getx();

构造函数和析构函数

例4.

classpoint{

intx,y;

public:

intgetx(){returnx;}

point(inta,intb);

point(chara,charb);

}

point:

:

point(inta,intb)

{

x=a;

y=b;

}

point:

:

point(chara,charb)

{

x=int(a);

y=int(b);

}

------------------------------------------------------------------------

例5.(一个整数栈类的说明)

classstack{

private:

int*top;

int*bottom;

public:

stack(){top=bottom=newint[100];}

voidpush(intc){if((top_bottom)<100)*top++=c;}

intpop(){if(--top>=bottom)return*top;}

~stack(){deletebottom;}

};

------------------------------------------------------------------------

使用整数栈类的例子——字母顺序反向

main()

{

charyour_string[20];

printf(“\nenteryourstring:

”);

scanf(“%s”,your_string);

printf(“\nyourstringisreversed%s”,reverse_str(your_string));

}

------------------------------------------------------------------------

char*reverse_str(char*string);

{

stacks;

char*re_ptr;

for(inti=0;i

re_ptr=newchar[strlen(string+1)];

for(inti=0;i

re_ptr[strlen(string)]=’\0’;

returnre_ptr;

}

--------------------------------------------------------------------

关于复制构造函数

例6.

classpointer{

intx,y;

public:

pointer(intcx,intcy){x=cx;y=cy;}

pointer(constpointer&p){x=p.x;y=p.y;}

}

voidmain()

{

pointerob1(40,50);

pointerob2=ob1;

}

pointersamp()

{

pointertemp(20,10);

returntemp;

}

------------------------------------------------------------------------

例7.另一个带有复制构造函数的类说明

classsample{

private:

char*pointer_char;

public:

sample(){pointer_char=NULL;}

sample(char*str){pointer_char=newchar[strlen(str)+1];

strcpy(pointer_char.str);}

sample(sample&ob){pointer_char=new[strlen(ob.pointer_char)+1];

strcpy(pointer_char,ob.pointer_char);}

~sample(){in(ponter_char!

=NULL)deletepointer_char;}

}

 

类说明中的数据成员是对象(属性是对象)

例8.(输入类)

classinner_class

{

intx;

public:

inner_class(intz){x=z;}

voidwrite(){printf(“%d\n”,x);

};

(输出类中有输入类对象)

classouter_class

{

inty;

inner_classg,h;

public:

outer_class(intz);

voidwrite(){printf(“%d\n”,y);}

voidwrite_inner_g();

voidwrite_inner_h();

};

outer_class:

:

outer_class(intz):

a(20),b(-36){y=z;}

outer_class:

:

write_inner_g(){g.inner_class:

:

write();}

outer_class:

:

write_inner_h(){h.inner_class:

:

write();}

main()

{

outer_classob(22);

ob.write_inner_g();

ob.write_inner_h();

}

也可以这样来定义输出类的构造函数

outer_class:

:

outer_class(x,y,z){y=x;

g.inner_class(y);

h.inner_class(z);

}

定义输出类对象ob:

outer_classob(22,20,-36);

对象数组

例9.

classpoint{

private:

intx,y;

public:

point(inta=0,intb=0){x=a;y=b;}

point(){init(0,0),}//不带参数的构造函数才能定义对象数组

voidinit(inta,intb){x=a;y=b;}

intx_cord(){returnx;}

inty_cord(){returny;}

};

main()

{

pointedata(3,4);

printf(“\nx=%dy=%d”,data.x_cord(),data.y_cord());

pointem_data[20];//因为有不带参数的构造函数,此句才是正确的

printf(“\nthexcoordinateofindex18=%d”,m_data[18].x_cord());

}

------------------------------------------------------------------------

类的自引用和this指针

例10.

classdog

{

dog*body;

dog*tail;

charname;

publicdog(char*dig_name)

{name=newchar[dog_name+1];

strcpy(name,dog_name);

tail=body=0;}

char*dog_name(){returnname;}

voidcreate_tail(char*type_tail)

{tail=newdog(type_tail);

tail->body=this;}

char*get_type_tail(){returnthis->tail->dog_name();}

};

main()

{

dogsheep_dog("rover");

sheep_dog.creat_tail("furry");

printf("\nThenameofthedogis%s",sheep_dog.dog_name());

printf("\nThetypeoffailis%s",sheep_dog.get_type_tail());

}

关于类属类

例11.定义一个类属的链表类

templateclasslist{

data_tdata;

list*next;

public:

list(data_td);{data=d;

next=0;}

voidadd(list*node){node→next=this;

next=0;}

list*getnext(){returnnext;}

data_tgetdata(){returndata;}

};

intmain()

{

liststar(‘a’);

list*p,*last;

inti;

last=&start;

for(i=1;i<26;i++){p=new(list(‘a’+i);

p→add(last);

last=p;}

p=&start;

while(p){printf(“%c\n”,getdata());

p=p→getnext();}

return1;

}

对象作为函数参数

例12.

classsamp{

char*s;

public:

samp(){s=’\0’;}

~samp(){if(s)delete[]s;

printf(“freeings\n”);}

voidshow(){printf(“%s\n”,s);}

voidset(char*str){s=newchar[strlen(str)+1];

if(!

s){printf(“allocationerror\n”);

exit

(1);}

strcpy(s,str);}

};

voidinput(samp&obj)

{

chars[80];

printf(“enterastring:

”);

scanf(“%s”,s);

obj.set(s)

}

main()

{

sampob;

input(ob);

ob.show();

}

------------------------------------------------------------------------

一种错误方式

sampinput()

{

chars[80];

samptemp;

printf(“enterastring:

”);

scanf(“%s”,s);

temp.set(s);

returntemp;

}

main()

{

sampob;

ob=input();

ob.show();

}

友元函数

例13.(矢量类说明)

classvector{

intv[n];

public:

elem(inti){………}//得到指定位置的元素泍作

friendmultiply(matrix&,vector&,int);

};

------------------------------------------------------------------------

(矩阵类说明)

classmatrix{

intm[][];

public:

elem(intiintj){…..}//得到指定位置的元素操作

friendmultiply(matrix&,vector&,int);

};

------------------------------------------------------------------------

计算矢量与矩阵的乘积函数

vectormultiply(matrix&m,vector&v,intn)

{

vectorr;

for(inti=0;i<(n-1);i++)

{

r.elem(i)=0;//加入友员说明后可以改为:

r.v[i]=0;

for(intj=0;j<(n-1);j++)r.elem(i)+=m.elem(i,j)*v.elem(j);//加入友员说明后可以改为:

//r.v[i]+=m.m[i][j]*v.v[j];

}

returnr;

}

------------------------------------------------------------------------

类的静态成员

例14.

classmyclass{

staticintm_count;

public:

staticintget_count(){returnm_count;}

staticvoidadd(){m_count++;}

}

intmyclass:

:

m_count=0;

程序可以直接使用类说明中的函数:

main()

printf(“count=%d\n”,myclass:

:

get_count());

for(intj=0;j<4;j++)myclass:

:

add();

printf(“count=%d”,myclass:

:

get_count());

}

关于继承

导出类

例1.(二维坐标系中的点类)

classbase_class

{

private:

floatx,y;

public:

voidassign(floatx1,floaty1){x=x1;

y=y1;}

floataccess_x(){returnx;}

floataccess_y(){returny;}

voidprint(){printf("x=%fy=%f",x,y);}

};

-----------------------------------------------------------------------------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1