第六章类和对象.docx

上传人:b****2 文档编号:13953353 上传时间:2023-06-19 格式:DOCX 页数:28 大小:20.07KB
下载 相关 举报
第六章类和对象.docx_第1页
第1页 / 共28页
第六章类和对象.docx_第2页
第2页 / 共28页
第六章类和对象.docx_第3页
第3页 / 共28页
第六章类和对象.docx_第4页
第4页 / 共28页
第六章类和对象.docx_第5页
第5页 / 共28页
第六章类和对象.docx_第6页
第6页 / 共28页
第六章类和对象.docx_第7页
第7页 / 共28页
第六章类和对象.docx_第8页
第8页 / 共28页
第六章类和对象.docx_第9页
第9页 / 共28页
第六章类和对象.docx_第10页
第10页 / 共28页
第六章类和对象.docx_第11页
第11页 / 共28页
第六章类和对象.docx_第12页
第12页 / 共28页
第六章类和对象.docx_第13页
第13页 / 共28页
第六章类和对象.docx_第14页
第14页 / 共28页
第六章类和对象.docx_第15页
第15页 / 共28页
第六章类和对象.docx_第16页
第16页 / 共28页
第六章类和对象.docx_第17页
第17页 / 共28页
第六章类和对象.docx_第18页
第18页 / 共28页
第六章类和对象.docx_第19页
第19页 / 共28页
第六章类和对象.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

第六章类和对象.docx

《第六章类和对象.docx》由会员分享,可在线阅读,更多相关《第六章类和对象.docx(28页珍藏版)》请在冰点文库上搜索。

第六章类和对象.docx

第六章类和对象

/*第六章类和对象

6.1类的定义分为说明部分和实现部分,类的成员包括数据成员和成员函数。

成员函数可以在类体内定义也可以在类体外定义。

说明部分:

class<类名>

{

public:

<成员函数或成员的说明>

protected:

<成员函数或成员的说明>

private:

<成员函数或成员的说明>

};

实现部分

<各个成员函数的实现>

6.1,2类成员的访问控制public相当于外部接口;

访问权限的修饰符是可以多次出现而且顺序可变。

私有成员可以被自己类中成员函数访问,类的对象也不可以对他进行访问。

6.1.3类的数据成员

注意1类的数九成员是任意类型的也可以是对象。

但是只有其他类的对象才能作为该类的成员,只有自身的指针才能作为自身的成员

当另一个类的对象作为该类的成员时另一个类必须在该类之后定义需要前向引用声明

2在类体中不可以对所定义的数据成员进行初始化。

6.1.4类的成员函数

必须在类体内声明,定义在体内体外均可。

第一种是成员函数直接定义在类的内部。

第二种是成员函数在类部,定义在外部。

格式为

<返回类型><类名>:

:

<成员函数名>(<参数表>)

{

<函数体>

}

作用域运算符(:

:

)的使用格式

<类名><成员函数名>(<参数表>)

<类名>:

:

<数据成员名>

定义和声明都在类中,这个成员函数就是类联函数。

定义在体外的函数变成内联函数要加上inline*/

/*#include

usingnamespacestd;

classDate

{

public:

voidSetDate

(inty,intm,intd);

intIsLeepYear();

voidPrint();

private:

intyear,month,day;

};

voidDate:

:

SetDate(inty,intm,intd)

{

year=y;

month=m;

day=d;

}

intDate:

:

IsLeepYear()//:

:

作用域运算符用来标识某个成员属于某个类

{

return(year%4==0&&year%100!

=0)||(year%400==0);

}

voidDate:

:

Print()

{

cout<

}*/

/*#include

usingnamespacestd;

classTest

{

public:

voidSetVal(intx);

voidSetVal(intx,inty);

intAdd(intx);

intAdd(intx,inty);

intAdd();

intGetX(){returnX;}

intGetY(){returnY;}

private:

intX,Y;

};

voidTest:

:

SetVal(intx)

{X=x;

Y=x*x;

}

voidTest:

:

SetVal(intx,inty)

{

X=x;

Y=y;

}

intTest:

:

Add(intx,inty)

{

X=x;

Y=y;

returnX+Y;

}

intTest:

:

Add(intx)

{

X=Y=x;

returnX+Y;

}

intTest:

:

Add()

{

returnX+Y;

}

intmain()

{Testobj1,obj2;

obj1.SetVal(10,20);

obj2.SetVal(4);

cout<<"obj1="<

cout<<"obj2="<

inti=obj1.Add();

intj=obj2.Add(3,9);

intk=obj2.Add(5);

cout<

return0;

}*/

/*#include

usingnamespacestd;

classDate

{

public:

voidSetDate(inty=2002,intm=10,intn=1);

intIsLeapYear();

voidprint(){cout<

private:

intyear,month,day;

};

voidDate:

:

SetDate(inty,intm,intd)

{

year=y;

month=m;

day=d;

}

intDate:

:

IsLeapYear()

{

return(year%4==0&&year%100!

=0)||(year%400==0);

}

intmain()

{

Datedate1,date2;

date1.SetDate();

date2.SetDate(2000,10,1);

cout<<"date1:

";

date1.print();

cout<<"date2:

";

date2.print();

if(date2.IsLeapYear())cout<<"date2isaleapyear."<

elsecout<<"date2isnotaleapyear."<

return0;

}*/

/*6.2对象的定义

<类名><对象名>(<参数列表>);有对象数组,对象指针,对象应用等

6.2.2对象的成员

<对象名>.<数据成员名>或<对象名>-><数据成员名>

<对象名>.<数据成员名>(<参数列表>)或<对象名>-><数据成员名>(<参数列表>)

*/

/*#include

usingnamespacestd;

classpoint{

public:

voidsetpoint(intx,inty);

voidmove(intxoff,intyoff);

intgetX(){returnX;}

intgetY(){returnY;}

private:

intX;intY;

};

voidpoint:

:

setpoint(intx,inty)

{X=x;

Y=y;

}

voidpoint:

:

move(intxoff,intyoff)

{

X+=xoff;

Y+=yoff;

}

intmain()

{

pointp1,p2;

p1.setpoint(1,2);

p2.setpoint(3,4);

p1.move(5,6);

p2.move(7,8);

cout<<"point1is("<

cout<<"point2is("<

return0;

}*/

/*6.3函数与析构函数的定义

构造函数的作用就是利用特定的值构造对象。

将对象初始化为一种特殊的状态

性质1构造函数的性质必须与类名相同

2构造函数不指定函数类型

3可以有多个参数

4创建对象是系统自动调用构造函数

格式

Date:

:

Date(inty,intm,intd):

year(y),month(m),day(d)

//

冒号之后初始化函数列表

{

cout<<"ConstructorofDatewith3parameters"<

}*/

/*#include

usingnamespacestd;

classDate

{

public:

Date(inty,intm,intd);

Date(inty=2000):

year(y)

{month=10;

day=1;

cout<<"ConstructorofDatewith1parameters."<

}

intIsLeepYear();

voidPrint();

private:

intyear,month,day;

};

Date:

:

Date(inty,intm,intd):

year(y),month(m),day(d)

//冒号之后初始化函数列表

{

cout<<"ConstructorofDatewith3parameters"<

}

intDate:

:

IsLeepYear()//:

:

作用域运算符用来标识某个成员属于某个类

{

return(year%4==0&&year%100!

=0)||(year%400==0);

}

voidDate:

:

Print()

{

cout<

}*/

/*析构函数与构造函数相反

性质

1析构函数名是在类名前面加~

2不指向返回类型,隐含有返回值

3没有参数,不能重载。

一类只能定义一个析构函数。

6.3.2默认的构造函数

格式

<类名>:

:

<类名>()

默认的析构函数

格式

<类名>:

:

<类名>~()

*/

/*#include

usingnamespacestd;

classDate

{

public:

Date(inty,intm,intd);

Date(inty=2000):

year(y)

{

month=10;

day=1;

cout<<"ConstructorofDatewith1parameters"<

~Date(){cout<<"DestructorofDate:

"<

intIsLeepYear();

voidPrint(){cout<

private:

intyear,month,day;

};

Date:

:

Date(inty,intm,intd):

year(y),month(m),day(d)

{

cout<<"ConstructorofDatewith3parameters"<

}

intDate:

:

IsLeepYear()//:

:

作用域运算符用来标识某个成员属于某个类

{

return(year%4==0&&year%100!

=0)||(year%400==0);

}*/

/*6.3.3复制构造函数

<类名>:

:

<类名>(const<类名>&<引用对象名>)

{

//复制构造函数体

}*/

/*#include

usingnamespacestd;

classDate

{

public:

Date(inty,intm,intd);

Date(inty=2000):

year(y)

{

month=10;

day=1;

cout<<"ConstructorofDatewith1parameters"<

}

Date(constDate&d);

~Date(){cout<<"DestructorofDate:

"<

intIsLeepYear();

voidPrint(){cout<

private:

intyear,month,day;

};

Date:

:

Date(inty,intm,intd):

year(y),month(m),day(d)

{

cout<<"ConstructorofDatewith3parameters"<

}

Date:

:

Date(constDate&d)

{year=d.year;

month=d.month;

day=d.day;

cout<<"CopyconstructorofDate."<

}

intDate:

:

IsLeepYear()//:

:

作用域运算符用来标识某个成员属于某个类

{

return(year%4==0&&year%100!

=0)||(year%400==0);

}*/

/*6.4自由储存对象

随时建立(new)和删除(delete)的对象为自由储存对象.

new创建对象数组会调用默认构造函数,delete删除对象是调用析构函数*/

/*#include

usingnamespacestd;

classTest

{

public:

Test();

Test(inti,intj);

~Test(){cout<<"Destructorcalled:

"<

voidSet(inti,intj);

voidPrint(){cout<

private:

intX,Y;

};

Test:

:

Test():

X(0),Y(0)

{cout<<"Defaultconstructorcalled."<

}

Test:

:

Test(inti,intj):

X(i),Y(j)

{

cout<<"Construtorcalled:

"<

}

voidTest:

:

Set(inti,intj)

{

X=i;

Y=j;

}

intmain()

{

Test*ptr1,*ptr2,*ptr3;

ptr1=newTest(1,2);

ptr2=newTest(3,4);

ptr3=newTest[2];

ptr3[0].Set(5,6);

ptr3[1].Set(7,8);

ptr1->Print();

ptr2->Print();

ptr3[0].Print();

ptr3[1].Print();

deleteptr1;

deleteptr2;

delete[]ptr3;

return0;

}*/

/*6.5this指针

成员函数的对象的指针,

指向类对象的地址隐含与类的非静态成员函数中,

可以引用对象的数据成员和成员函数

Date&Date:

:

AddYear(intn)

{if(day==29&&month==2&&!

IsLeapYear(year+n))

{

day=1;month=3;

}

year+=n;

return*this;

}

可以改为Date&Date:

:

AddYear(intn)

{if(this->day==29&&this->month==2&&!

IsLeapYear(this->year+n))

{

this->day=1;this->month=3;

}

this->year+=n;

return*this;

}

6.6静态成员

6.6.1静态数据成员用static

<数据类型><类名>:

:

<静态数据成员名>=<初始值>

静态数据成员的值可以被任何一个对象更新*/

/*#include

usingnamespacestd;

classpoint

{

public:

point(intxx=0,intyy=0,intzz=0):

X(xx),Y(yy),Z(zz)

{

count++;

}

voidDisplay()

{

cout<<"thispointis("<

cout<<"thereare"<

}

private:

intX,Y,Z;

staticintcount;

};

intpoint:

:

count=0;

intmain()

{pointp1(1,2,3),p2(4,5,6);

p1.Display();

p2.Display();

return0;

}*/

/*6.6.2静态成员函数

可以在类内和类外定义

在类外定义时static不能直接作为前缀

<类名>:

:

<静态数据成员名>

<类名>:

:

<静态数据成员名>(<参数列表>)

*/

/*#include

usingnamespacestd;

classPoint

{

public:

Point(intxx=0,intyy=0,intzz=0):

X(xx),Y(yy),Z(zz)

{

count++;

}

staticvoidDisplay(Point&p);

private:

intX,Y,Z;

staticintcount;

};

voidPoint:

:

Display(Point&p)

{

cout<<"thispointis("<

cout<<"thereare"<

}

intPoint:

:

count=0;

intmain()

{

Pointp1(1,2,3),p2(4,5,6);

p1.Display(p1);

p2.Display(p2);

return0;

}*/

/*6.7常成员const

const可以修饰类对象本身和对象的成员函数和数据成员

分别叫做常对象,常成员函数,常数据成员

6.7.1

<类名>const<对象名>

或const<类名><对象名>

6.7.2常成员函数

<返回类型><成员函数名>(<参数表>)const;

当成员函数是常成员函数时常对象和一般对象都可以调用它;

而一般成员函数只有一般对象可以调用

*/

/*#include

usingnamespacestd;

classPoint

{

public:

Point(intxx=0,intyy=0):

X(xx),Y(yy){}

voidMove(intxoff,intyoff)

{

X+=xoff;

Y+=yoff;

}

voidPrint()const{cout<<"Thepointis("<

private:

intX,Y;

};

intmain()

{

Pointp1(1,2);

constPointp2(3,4);

p1.Move(5,6);

p1.Print();

p2.Move(7,8);

p2.Print();

return0;

}//p2是常对象而Move不是一个常成员函数*/

/*#include

usingnamespacestd;

classPoint

{

public:

Point(intxx=0,intyy=0):

X(xx),Y(yy){}

voidPrint(){cout<<"Thepointis("<

'<

voidPrint()const{cout<<"Thepointis("<

private:

intX,Y;

};

intmain()

{

Pointp1(1,2);

constPointp2(3,4);

p1.Print();

p2.Print();

return0;

}*/

/*6.7.3常成员函数

定义必须在类体类

常成员函数的初始化只能通过构造函数的成员初始化列表显式进行

*/

/*

#include

usingnamespacestd;

classMyclass

{

public:

Myclass(inti,intj);

voidPoint()const{cout<

private:

constinta;

intb;

};

Myclass:

:

Myclass(inti,intj):

a(i),b(j){}

intmain(){

Myclassobj1(1,2);

obj1.Point();

return0;

}//首先执行初始化列表,然后才执行构造函数体;

*/

/*6.8友元(friend)

友元可以在类的外部直接访问类的私有成员和保护成员;

6.8.1友元函数

函数钱加friend,可以放在公有部分,私有部分,保护部分*/

/*#include

usingnamespacestd;

classTIME;

classDATE

{

public:

DATE(inty=2003,intm=1,intd=1):

year(y),month(m),day(d){}

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

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2