C++ 自学资料 1Word下载.docx
- 文档编号:18364721
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:42
- 大小:37.14KB
C++ 自学资料 1Word下载.docx
《C++ 自学资料 1Word下载.docx》由会员分享,可在线阅读,更多相关《C++ 自学资料 1Word下载.docx(42页珍藏版)》请在冰豆网上搜索。
静态成员函数:
属于整个类的成员函数。
Thestatevariablesareusuallyhiddenfromoutsidetheclasstoachieveinformationhiding(信息隐藏),andthemethodsareusuallyaccessiblefromtheotherpartoftheprogramtoprovideaninterfaceoftheobjectsofthisclasswiththeotherpartoftheprogram.
把类的数据成员对外隐藏,使之从外部不可见,称为信息隐藏。
成员函数是给外部的访问接口。
Todefineaclass,wehavetospecifyalistofdatamembers,andalistofmemberfunctions.Ifamemberisnotaccessiblefromtheotherpartoftheprogram,itisprivate(私有);
otherwise,itispublic(公有).Therefore,datamembersareusuallyprivateandmemberfunctionsareusuallypublic.Themembersinaclasscanbeinanyorder.Amemberfunctionmayuseadatamemberlistafterit,anditmaycallanothermemberfunctionlistedafterit.Inthiscase,nofunctionprototypeisneeded.
一般来数,成员变量为私有(private),成员函数为公有(public)。
外部只能通过公有的成员函数才能访问对象,则把对象的私有数据保护起来了。
这种方式就是“封装”。
Inthisway,anobjectcanbemanipulatedonlythroughalimitedsetofinterfacemethods.Theprivatemembersareprotectedfromaccessingbytheotherpartoftheprogram.Thisachievesso-calledencapsulation(封装).(例:
主机机箱按钮or改锥)
Amongthememberfunctions,somefunctionsareusedtocreateandinitializeanobject,calledconstructors(构造函数),somefunctionsareusedtodestroyobjects,calleddestructors(析构函数),somefunctionsareusedtoreadthestatevariables,calledaccessors(get函数),somefunctionsareusedtosetthestatevariables,calledmodifiers(set函数).Therecanalsobeotherkindofmemberfunctions.
Example1:
ACircleClass
类:
自定义的数据类型。
#include<
iostream.h>
math.h>
classCircle
//ACircleobjectisaradiusandacentre
{
public:
//公有
//Initializeacirclewhichisapointatorigin
Circle();
//声明成员函数
//构造函数:
函数名和类名一样,没有返回值。
floatgetRadius();
//accessors(get函数),访问成员变量。
floatgetCentreX();
floatgetCentreY();
voidsetCircle(floatr,floatx,floaty);
//modifiers(set函数),成员变量。
floatdistance(Circlec1);
//普通的成员函数。
private:
float_radius;
//3个私有成员变量,外界无法直接访问。
float_xCentre;
float_yCentre;
};
//别忘了分号
Circle:
:
Circle()//实现成员函数类名:
成员函数名
//Constructor:
Initializeacirclewithall0'
s
{
_radius=0.0;
//在构造函数里,对成员变量进行初始化。
_xCentre=0.0;
_yCentre=0.0;
}
floatgetRadius();
floatgetRadius()
{dfasdfsdf
floatCircle:
getRadius()
{return_radius;
}//get函数,返回类的私有成员变量_radius。
getCentreX()
{return_xCentre;
getCentreY()
{return_yCentre;
voidCircle:
setCircle(floatr,floatx,floaty)
_radius=r;
//set函数,修改Circle类的私有成员变量。
_xCentre=x;
_yCentre=y;
//计算两个圆心之间的距离。
distance(Circlec1)
{//calculatesthedistancebetweencentresoftwocircles
return
(sqrt((_xCentre-c1._xCentre)*(_xCentre-c1._xCentre)
+(c1._yCentre-_yCentre)*(c1._yCentre-yCentre)));
//区别两个不同的_xCentre和_yCentre
//return(sqrt((_xCentre-c1.getCentreX())*(_xCentre-c1.
//getCentreX())+(c1.getCentreY()-_yCentre)*(c1.//getCentreY()-_yCentre)));
//另一种写法
}
p1(x1,y1)p2(x2,y2)
((x1-x2)^2+(y1-y2)^2)^(1/2)
intmain()
Circlec1;
//类名对象名。
声明一个类的对象
inta;
Circlec[3];
//声明一个对象的数组,该数组含有三个Circle类的对象。
c[1].setCircle(1.0,0.0,0.0);
//调用对象的成员函数。
c[2].setCircle(1.0,1.0,1.0);
c[0].setCircle(1.0,0.0,27.0);
cout<
<
”c[0]’sradiusis”<
c[0].getRadius()<
endl;
”c[0]’scenterxis”<
c[0].getCentreX()<
"
thedistancebetweenthecentresis"
<
c[1].distance(c[2])
"
units\n"
;
c[1].distance(c[0])
\nTheend\n"
return0;
Constructors.(构造函数)
Constructorsarememberfunctionsautomaticallycalledwhenadeclarationofanobjectoftheclassismade.
声明对象时,将自动调用构造函数。
●Constructorsarepublicmembersoftheclass.(why?
)构造函数必须公有。
●Constructorshavethesamenameastheclass.函数名和类名一样
●Constructorscannotreturnvalues.没有返回值。
●Constructorsmaytakeparameterstoinitializethedatamembers.构造函数可以接收参数
Thedefaultconstructor(默认构造函数)
Ifaconstructorscanbecalledwithoutparameters(itmayhaveparameterswithdefaultvalues),itiscalledadefaultconstructor.(默认构造函数,不是说构造函数一定没有参数,而是说调用时可以不传参数。
)Aclassmayhaveanynumberofconstructors(overloading),whicharedistinguishedtoeachotherbytheparameterlist.
一个类可以有多个重载的构造函数,靠不同的参数列表来区分。
当中,一定有一个且只能有一个默认构造函数。
也就是说,创建对象时,不需要向构造函数传递参数。
包括两种情况:
1.构造函数本身无参数;
2.构造函数有参数,但参数都有默认值。
Everyclassshouldhaveatleastoneconstructor.Ifnoconstructorisdeclaredexplicitlyinaclass,thecompilerprovidesadefaultconstructor,whichdoesnotinitializeanydatamember.(Therefore,thedefaultconstructorinthisexamplecanbeomitted).
如果程序员一个构造函数都没写,编译器将提供一个空的默认构造函数,它不会对数据成员进行初始化。
对于每个类都写一个默认构造函数,是程序员的一个好习惯。
Thedefaultconstructorprovidedbythecompilermayworkdifferentlyfromauserdefineddefaultconstructorinsomecases.Itisagoodpracticealwaystodefineadefaultconstructor,unlessyoudon'
twantitbyaspecificreason.
一旦程序员提供了构造函数,编译器将不提供默认构造函数。
Ifthereisaconstructor(ofanykind)declaredinaclass,thecompilerdoesnotprovidethisdefaultconstructor.Inthiscase,iftheconstructordeclaredintheclassneedssomeparameters,everyobjectofthisclasshastobedeclaredwithinitialvalues.
Othervariationsonthedefaultconstructor
∙defaultconstructorwithdefaultvalues:
Givestheopportunitytoeitherusedefaultvaluesoroverride.
Example2:
classThing
Thing(inta=10,intb=20,intc=30)//带默认值的构造函数
//函数参数有默认值,调用该函数时可以不传递实参,形参将采用默认值。
Thing();
Thing(inta,intb,intc)
Thing(5,6,7);
{x=a;
y=b;
z=c;
}//比较两个构造函数头,调用时的区别是什么?
voidprintThing()
{cout<
x="
x<
y="
y<
z="
z<
}//badpractice
intx;
inty;
intz;
voidmain()
Thingt;
t.printThing();
Things
(1);
//参数传给了谁?
s.printThing();
Thingr(1,2);
r.printThing();
Thingv(1,2,3);
v.printThing();
OUTPUT
x=10y=20z=30
x=1y=20z=30
x=1y=2z=30
x=1y=2z=3
Example3:
iostream>
usingnamespacestd;
public:
Thing(inta=20,intb=30,intc=50);
voidprintThing();
intx;
inty;
intz;
Thing:
Thing(inta,intb,intc)//
x=a;
y=b;
z=c;
voidThing:
printThing()
cout<
Thingt(999,888);
t.printThing();
return0;
Importantnote:
Ifyouareusingthestandardconstructorwithinitialization,thenumberofparametersinthedeclarationmustmatchthatintheconstructor:
定义对象时参数的个数,要和构造函数参数的个数匹配!
Thing(){}
Thing(inta=1,intb=2,intc=3)
{
{
y="
z="
Thingt(1,2,3);
//COMPILERERRORHERE.
//PARAMETERSDONTMATCH
//CONSTRUCTOR
//如果程序员提供了一个构造函数,即使这个构造函数不是默认构造函数,编译器也不再自动提供空的默认构造函数。
Whichconstructorgetscalled?
CaseI
Thing(intint1,intint2){x=int1;
y=int2;
Thing(intint1=7,intint2=5){x=int1;
}//重定义,编译器报错
//Thing(){x=1;
y=1;
voidprint(){cout<
”x=”<
”y=”<
y<
intmain()
Thingt(10,10);
t.print();
//Things;
//s.print();
Compilingerror.//为什么会编译错误?
你要替编译器想一想。
CaseII
Thing(intint1=7,intint2=5){x=int1;
Thing(){x=1;
y="
y<
endl;
intx;
};
Usesdefault
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 自学资料 自学 资料