C++程序设计教程第7版-2421-2640_第1页
C++程序设计教程第7版-2421-2640_第2页
C++程序设计教程第7版-2421-2640_第3页
C++程序设计教程第7版-2421-2640_第4页
C++程序设计教程第7版-2421-2640_第5页
已阅读5页,还剩215页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

voidget_XY(){cout<<"Entervoidput_XY(){cout<<"x=protected

:

int

x,V;};class

B:public

A{public:int

get_S({return

s

c};voidmake_SO{s=x*y;};protected:

ints};class

C:public

B{public:void

get_H({cout<<"Enter

a

number

ofint

get_V({return

v;}void

make_VO{make_S();v=get_SO*h;}

protected:

int

h,

v;华南理工大学计算机学院周霭如2025two

numbers

of"≤<x<<".v="<<v<≤保护数据成员

在类层次中可见//使用基类数据成员x,y:";cin>>x>>y;}'\n';}classAAclass

B:public

X#include<iostream>using

namespace

std;class

A{public:h:";cin>>h;}//使用基类成员函数例18-1

公有继承的测试class

C:public

Ycout<<"It

is

object_A:In";objA.get_XY();objA.put_XY();cout<<"It

is

object_B:\n";objB.get_XY();objB.make_SO;cout<<"S="<<objB.get_SO<<endl;cout<<"It

is

object_C:\n";objC.get_XY();objC.get_H();objC.make_VO;cout<<"V="<<objC.get_V(<<endl;int

main(){A

objA;B

objB;C

objC;例18-1

公有继承的测试华南理工大学计算机学院周霭如2025C

objC;cout<<"It

is

object_A:\n";objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";

objB.get_XYO);objB.make_S(;cout<<"S="<<objB.get_S(<<endl;

cout<<"It

is

object_C:\n";objC.get_XYO;objC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;int

main()

例18-1

公有继承的测试{

A

objA;

X

yl华南理工大学计算机学院周霭如2025objB;

objAobjA.xobjA.yB{A

objA;B

objB;C

objC;cout<<"It

is

object_A:\n";objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";

objB.get_XYO);objB.make_S(;cout<<"S="<<objB.get_S(<<endl;

cout<<"It

is

object_C:\n";objC.get_XYO;objC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;int

main()

例18-1

公有继承的测试l华南理工大学计算机学院周霭如2025objB.xobjB.yobjB.sobjA.xobjA.yX

yobjBobjAS{A

objA;B

objB;C

objC;cout<<"It

is

object_A:\n";

objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";

objB.get_XYO);objB.make_S(;cout<<"S="<<objB.get_S(<<endl;

cout<<"It

is

object_C:\n";objC.get_XYO);objC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;objAobjBobjCSobjB.xobjC.xobjB.yobjC.yobjB.SobjC.shobjC.hVobjC.vint

main()

例18-1

公有继承的测试l华南理工大学计算机学院周霭如2025objA.xobjA.yX

y{A

objA;B

objB;C

objC;cout<<"It

is

object_A:\n";objA.get_XYO;objA.put_XY();

Qcout<<"It

is

object_B:\n;。objB.get_XYO);objB.make_S(;cout<<"S="<<objB.get_S(<<enm,cout<<"It

is

object_C:\n";objC.get_XYO;objC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;}int

main()

例18-1

公有继承的测试对objA

的数据成员操作obj

xobjA.yobjB.SobjC.sobjB.xobjC.xobjB.yobjC.yobjBobjChobjC.h华南理工大学计算机学院周霭如2025VobjC.vX

yobjAS{A

objA;BobjB;C

objC;cout<<"It

is

object_A:\n";objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";objB.get_XY(

;QobjB.make_S(;cout<<"S="<<objB.get_S(<<endl;cout<<"It

is

object_C:\n";objC.get_XYO;objC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;objB.xobjC.xobjB.yobjC.yobjB.SobjC.shobjC.hVobjC.vint

main()

例18-1

公有继承的测试调用基类A成员函数对objB的数据成员操作l华南理工大学计算机学院周霭如2025objAobjBobjCobjA.xobjA.yX

yS{A

objA;B

objB;C

objC;cout<<"It

is

object_A:\n";

objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";

objB.get_XYO);objB.make_SO;Qcout<<"S="<<objB.get_S(<<endl;

cout<<"It

is

object_C:\n";objC.get_XY();objC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;objBobjCobjB.xobjC.xobjB.yobjC.yobjB.SobjC.shobjC.hVobjC.vint

main()

例18-1

公有继承的测试调用派生类B成员函数对objB的数据成员操作l华南理工大学计算机学院周霭如2025objA.xobjA.yX

yobjAS{A

objA;B

objB;C

objC;cout<<"It

is

object_A:\n";objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";objB.get_XYO);objB.make_S(;cout<<"It

is

object_C:Yn";objC.get

_XY(;

CobjB.get_S()

<<

endl

ct_CobjC.get_H();objC.make_V(;cout<<"V="<<objC.get_V()<<endl;}SobjB.x

objB.y

objB.Sh

Vobjcx

objc.y

objC.s

objC.h

objC.v调用基类A成员函数对objC的数据成员操作int

main()

例18-1

公有继承的测试objAobjBobjCobjA.xobjA.y华南理工大学计算机学院周霭如2025X

y:\n"

;{A

objA;B

objB;C

objC;cout<<"It

is

object_A:\n";objA.get_XY();objA.put_XY(;cout<<"It

is

object_B:\n";

objB.get_XYO);objB.make_S(;cout<<"S="<<objB.get_S()<<endl;

cout<<"It

is

object_C:\n";objC.get_XY();objC.get

_H(;SobjB.x

objB.y

objB.Sh

VobjC.x

objC.y

objC.s

objC.h

objC.v调用派生类C成员函数对

objC

的数据成员操作int

main()

例18-1

公有继承的测试objC.make

_V(;cout<<"V="<<

objC.get_V(<<endl;objAobjBobjCobjA.xobjA.y华南理工大学计算机学院周霭如2025X

y{A

objA;B

objB;C

objC;cout<<"It

is

object_A:In";

objA.get_XY(;objA.put_XY(;cout<<"It

is

object_B:In";

objB.get_XY(;objB.make_SO;cout<<"S="<<objB.get_S(<<endl;cout<<"It

is

object_C:\n";objC.get_XY(;objC.get_H(;objC.make_VO;cout

<<"V="<<objC.get_V(<<endl;x

=

1,y=2I

t

is

object_B:Enter

two

numbersof

x,y:34

S=12I

t

is

object

_C

:Enter

two

numbers

of

x,y:45Enteranumberofh:6V

=120Press

any

key

to

continueobjBobjCobjB.xobjC.xobjB.yobjC.yobjB.SobjC.shobjC.hVobjC.vint

main()

例18-1

公有继承的测试It

is

object_A

:Enter

two

numbers

of

x,y:12objA.xobjA.y华南理工大学计算机学院周霭如2025X

yobjASprivate成员protected成员private成员public成员private成员private成员protected成员public成员2.私有继承基类

派生类华南理工大学计算机学院周霭如2025#include<iostream>using

namespace

std;classA{public:voidget_XY({cout<<"Enter

two

numbers

ofxavoid

put_XY({cout<<"x="<<x<<",y="<<y<<'In’;

protected:

int

x,y;};class

B:

privateA{public:int

get_SO{return

s;}voidmake_SO{get_XY(;s=x*y;}private:

ints;};int

main(){

B

objB;cout<<"It

is

object_B:\n";objB.make_SO;cout<<"S="<<objB.get_S()<<endl;objB例8-2私有继承的测试class

A

y;}class

B:private

Aprivate成员}华南理工大学计算机学院周霭如2025objB.xobjB.yobjB.sprotected:

int

x,y;};class

B

:

private

A{public:int

get_SO{returns;void

make_S(){get_

XY(;private:

int

s;};int

main(){B

objB;cout

<<"Itisobject_B:\n";objB.make_S(;cout<<"S="<<objB.get_S()<<endl;

objB

objB.x

objB.y

objB.s

#include<iostream>

例8-2

私有继承的测试using

namespace

std;classA{public:void

get_XY({cout<<"Enter

two

numbers

of

x

and

class

Avoidput_XY(){cout<<"x="<<x<<",y="<<y调用基类成员函数B:private

A华南理工大学计算机学院周霭如2025private成员{public:void

get_XY({cout<<"Enter

two

numbers

of

x

and

class

Avoid

put_XY(){cout<<"x="<<x<<",y="<<y<'n';}protected:

int

x,y;};class

B

:

private

A

class

B:private

A{public:cout<<"Itisobject_B:n";objB.make_SO;cout<<"S="<<objB.get_S()<<endl;int

get_S({return

s;}void

make_S({get_XY();

private:

int

s;#include<iostream>

例8-2

私有继承的测试using

namespace

std;classAobjB.xobjB.yobjB.s访问私有数据成员华南理工大学计算机学院周霭如2025private成员};

int

{BobjBusing

namespace

std;class

A{public:void

get_XY({cout<<"Enter

two

numbers

of

xa

class

A

voidput_XY({cout<<"x="<<x<<",y="<<y<<'In’;protected:

int

x,y;};class

B:private

A

class

B:private

A{public:int

get_SO{return

s;}void

make_SO{get_XY();s=Xprivate:

ints;};int

main(){B

objB;NC:\WINDOWs\system32\cmd.exe

Itisobject_B:Entertwo

numbers

of×and

S

=15请按任意键继续.

.

.#include<iostream>

例8-2

私有继承的测试cout<<"It

is

object_B:\n";objB.makeSO;

<<"S="<<objB.get_S()<<endl;objB.xobjB.yobjB.s回

×:35private成员华南理工大学计算机学院周霭如2025y;}objBcouty例8-3私有数据成员的测试class

Aclass

B:public

A#include<iostream>using

namespace

std;class

A{public:AO{x=1;}int

out(){returnx;}

void

addX({x++;}p

rivate:int

x;};cout<<"a.x="<<a.ouLo<<enar;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;class

B:public

A{public:BO{y=1;}int

out(Ovoidaddprivate:int

y;不能在派生类中直接访问但派生类对象建立私有数据空间{returny;}基类的私有数据成员};int

main()

{Aa;华南理工大学计算机学院周霭如2025class

A{public:AO{x=1;}int

out(){returnx;}void

addX({x++;}private:int

x;};class

B:public

A{public:BO{y=1;}int

out({returny;}void

addYO{y++;}private:inty;};int

main(){Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;N

C:\TIEDOTS\system32\cmd.exea.x=1b.

x=2b.y=2请按任意键继续.

..a.xb.x

b.y#include<iostream>using

namespace

std;例8-3

私有数据成员的测试华南理工大学计算机学院周霭如2025class

Aclass

B:public

AN

C:\TIEDOTS\system32\cmd.exea.x=1请按任意键继续

...a.x

1b.x

b.yVoaaaaY){y++;}private:inty;};int

main(){

Aa;cout<<"a.x="<<a.out()<<endl;Bb;b.addX();b.addY();cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;class

A{public:AO{x=1;}int

out(){return

x;}void

addX({x++;}private:int

x;};clas

调用构造函数#include<iostream>using

namespace

std;例8-3

私有数据成员的测试对数据成员赋值华南理工大学计算机学院周霭如2025{pu{public:AO{x=1;}int

out(){return

x;}

voidaddX({x++;}private:int

x;};class

B:public

A{public:

BO{y=1;}int

out(){return

y;}

voidaddy){y++;}private:

inty;};int

main(){Aa;cout<f"a.x="<<a.out()<<endl;Bb,b.addX();b.addY();创建派生类对象调用基类→派生类构造函数b.x=1

b.y=1b.

x=2请按任意键继续.

..cout<<"b.y="<<b.out()<<endl;b.x

1

b.y

1#include<iostream>using

namespace

std;例8-3

私有数据成员的测试cout<<"b.x="<<b.A::out()<<endl;华南理工大学计算机学院周霭如2025b.y=2publicclass

Aclass

AAa.xclass

A{public:AO{x=1;}int

out(){return

x;}void

addX({x++;}private:int

x;};class

B:public

A{public:B({y=1;}int

out(){peturn

y;}

void

addYO{y++;}private:

inty;};int

main(){Aa;cout<<a.x="<<a.out()<<endl;class

A调用基类公有成员函数b.x

+十CNC:\TIKDOTS\system32\cad.exea.x=1b.

x=2b.y=

2请按任意键继续.

..Bb;b.addX();

b.addY();

a.xcout<<"b.y="<<b.out()<<endl;b.x

2

b.y

1#include<iostream>using

namespace

std;例8-3

私有数据成员的测试cout<<"b.x="<<b.A::out()<<endl;class

B:public

A华南理工大学计算机学院周霭如2025class

A{public:AO{x=1;}int

out(){return

x;}voidaddX({x++;}private:int

x;};c{

li

:B:p(u{

;}A

调用派生类公有成员函数

β:public

Aint

out(){return

yf

}

b.y

++void

addY({yy+;}

CNC:\TIKDOTS\system32\cad.exeprivate:inty;

a.x=1};

..

22请按任意键继续.

..cout<<"a.x="<</a.out()<<endl;Bb;b.addX();

b.addY();

a.x

1cout<<"b.x="<<b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;

b.x

2

b.y

2bb1cybcBpublass#include<iostream>using

namespace

std;例8-3

私有数据成员的测试int

main(){Aa;华南理工大学计算机学院周霭如2025class

Aclass

A{public:AO{x=1;}int

out(){returnx;}void

addX({x++;}private:int

x;};class

B:public

A{public:B({y=1;}int

out(){return

y;}void

addY({y++;}private:inty;};int

main(){Aa;cout<<"a.x="<<a.out()<endl;Bb;b.addX();b.addY(;cout

<<"b.x="<<

b.A::out()<<endl;cout<<"b.y="<<b.out()<<endl;请按任意键继续a.x

1b.x

2

b.y

2class调用基类版本同名函数返回b.x的值CNC:\TIKDOTS\system32\cad.exe#include<iostream>using

namespace

std;AublicA例8-3

私有数据成员的测试华南理工大学计算机学院周霭如2025class

A{public:AO{x=1;}int

out(){return

x;}voidaddX({x++;}private:int

x;};class

B:public

A{public:B({y=1;}int

out({return

y;}void

addY({y++;}private:inty;};int

main(){Aa;cout<<"a.x="<<a.out()<kendl;Bb;b.addX();b.addY();cout

<<"b.x="<<b.A:out()<<endl;cout

<<"b.y="<<bout()

<<endl;class调用派生类版本同名函数返回b.y的值b

x=2请按任意键继续.

..a.x

1b.x

2

b.y

2#include<iostream>using

namespace

std;AublicA例8-3

私有数据成员的测试华南理工大学计算机学院周霭如2025private成员protected成员protected成员public成员protected成员private成员protected成员public成员3.

保护继承基类

派生类华南理工大学计算机学院周霭如20258.2.2重名成员派生类定义了与基类同名的成员,在派生类中访问同名成员时屏蔽了基类的同名成员在派生类中使用基类的同名成员,显式地使用类名限定符:类名::成员华南理工大学计算机学院周霭如20251.

重名数据成员例:class

base{public:int

a,b;};class

derived:publicbase

{public:int

b,c;};void

f({derivedd;d.a=1;d.base::b=2;d.b=3;d.c=4;};derived

a

b

b

Cbase

a

b华南理工大学计算机学院周霭如20251.

重名数据成员例:class

base{public:int

a,b;};classderived:public

base

{public:int

b,c;};void

f(){derivedd;d.a=1;d.base::b=2;d.b=3;d.c=4;};derived

a

b

b

Cbase

a

b华南理工大学计算机学院周霭如2025derived

d1.

重名数据成员例:class

base{public:int

a,b;};classderived:public

base

{public:int

b,c;};voidf(){derived

,d;

c

,

d

;d.a

=1d.base::b=2;d.b=3;d.c=4;};derived

d

1访问从base

类继承的数据成员aderived

a

b

b

C华南理工大学计算机学院周霭如20251.

重名数据成员例:class

base{public:int

a,b;};classderived:public

base

{public:int

b,c;};voidf(){derived

d;d.a=1

;d.

base:b

=2,d.b=3;d.c=4;};basederivedderived

d访问从base类继承的b华南理工大学计算机学院周霭如2025bb2b

Caa11.

重名数据成员例:class

base{public:int

a,b;};classderived:public

base

{public:int

b,c;};void

f(){derived

d;d.a=1;d.bese

:b=2;d.b=3,d.c=4;};derived

a

b

b

C访问derived

类定义的数据成员b123base

a

b华南理工大学计算机学院周霭如2025derived

d1.

重名数据成员例:class

base{public:int

a,b;};classderived:public

base

{public:int

b,c;};void

f(){derived

d;d.a=1;d.base

::b=2;d.b=3;d

.c

=4};derived

a

b

b

C访问derived

类定义的数据成员c1234base

a

b华南理工大学计算机学院周霭如2025derivedd1.

重名数据成员例:class

base{public:int

a,b;};classderived:public

base

{public:int

b,c;};void

f(){derived

d;d.a=1;d.base::b=2;d.b=3;d.c=4;};>

基类成员的作用域延伸到所有派生类>

派生类的重名成员屏蔽基类的同名成员derived

a

b

b

C1234base

a

b华南理工大学计算机学院周霭如2025derived

d#include<iostream>

//例8-4

2.

重名成员函数using

namespace

std;class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}voidprint()class

B:public

A{public:int

b1,b2;B(int

j1=1,intj2=1){b1=j1;b2=j2;}voidprint()

//定义同名函数{cout<<"b1="<<bl<<"t'<<"b2="<<b2<<endl;}Vo1a

printAB(){A::print();print();}};int

main(){Bb;

b.A::print()

;

b.printAB(;}华南理工大学计算机学院周霭如2025//派生类对象调用基类版本同名成员函数

//派生类对象调用自身的成员函数{cout<<"a1="<<al<<nt'<<"a2="<<a2<<endl;};#include<iostream>

11例8-4

2.

重名成员函数using

namespace

std;class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}void

prim00派生类屏蔽基类同名成员函数调用自身的成员函数j2=1){b1=jl;b2=J2;T//定义同名函数{Bb;

b.A::print();b.printAB(;}华南理工大学计算机学院周霭如2025class

B:public

A

{public:int

b1,b2;B(int

j1=1,intvoid

print()//派生类对象调用基类版本同名成员函数

//派生类对象调用自身的成员函数{cout<<"D1="<<bl<<"t'<<"b2="<<b2<<endl;}{cout

<<

"a1="

<<a1

<<

"\t"

<<

"a2="

<<

a2

<<

endl

;

}Vo1a

printAB)

{A::print();-print();};int

main()};B(intj1=1,intj2=1){b1=j);b2=j2;}voidprint()

1I定义同名函数{cout<<"b1="<<bí<<"t'<<"b2="<<b2<endl;}Vo1a

printAB()void

prim00{

cout

<<

"a1="

<<

a1

<<};class

B:public

A{public:int

b1,b2;};int

main()Bb;A:

print()

b.printAB(;}华南理工大学计算机学院周霭如2025class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}'\t'<<

"a2="

<<

a2

<<

endl

;

}派生类对象调用从基类继承的同名成员函数#include<iostream>

11例8-4

2.

重名成员函数using

namespace

std;//派生类对象调用基类版本同名成员函数/

/派生类对象调用自身的成员函数A:print(print();class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}void

prim00{cout<<"al="<<al<<nt'<<"a2="<<a2<<endl;)};

classB:public

A

基类this指针voidprint()

1I定义同名函数{cout<<"b1="<<bí<<"t'<<"b2="<<b2<endl;}Vo1a

printAB()#include<iostream>

11例8-4

2.

重名成员函数using

namespace

std;{public:int

b1,b2;B(int

j1=1,intj2=1){b1=jY;b2=j2;}Bb;

A:print()

b.printAB(;}华南理工大学计算机学院周霭如2025//派生类对象调用基类版本同名成员函数

/

/派生类对象调用自身的成员函数A:print(print();};int

main()指向派生类对象class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}voidprint(){cout<<"al="<<al<<'\t'<<"a2="<<a2<<endl;}};class

B:public

A{public:int

b1,b2;B(int

j1=1,intj2=1){b1=j1;b2=j2;}voidprint()

//定义同名函数{cout<<"b1="<<b1<<'t'<<"b2="<void

printAB({A::print();

//派生类对象调人print();

/派生类对象调人

请按任意键继续

.

.};int

main()#include<iostream>

11例8-4

2.

重名成员函数using

namespace

std;{Bb;

b.A::print()

;

b.printAB(;}华南理工大学计算机学院周霭如2025#include<iostream>

//例8-4

2.

重名成员函数using

namespace

std;class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}void

print(){c

out<<"al="<<al<<'t'<<"a2="<<a2<<endl;}};class

B:public

A{public:int

b1,b2;B(int

j1=1,intj2=1){b1=j1;b2=j2;}N

C:\WINDOWS\system32\cmd.exe

a1=0a1=0

a2=0b1=1

b2=1请按任意键继续.void

printAB(){A::print();print();};int

main(){Bb;

b.A::print();b.printAB();}华南理工大学计算机学院周霭如2025voidprint()

//定义同名函数

{cout<<"b1="<<b1<<'t'<<"b2="<//派生类对象调人

//派生类对象调#include<iostream>

//例8-4

2.

重名成员函数using

namespace

std;class

A{public:int

a1,a2;A(int

i1=0,int

i2=0){al=i1;a2=i2;}void

print(){c

out<<"al="<<al<<'t'<<"a2="<<a2<<endl;}};class

B:public

A{public:int

b1,b2;B(int

j1=1,intj2=1){b1=j1;b2=j2;}voidprint()

//定义同名函数{cout<<"b1="<<b1<<'t'<<"b2="<<void

printAB(){A::

print();

//派生类

对象调print();//派生类对象调人};int

main()b{Bb;b.A::print();.printAB();}华南理工大学计算机学院周霭如2025#include<iostream>

//例8-4

2.

重名成员函数using

namespace

std;class

A{public:int

a1,a2;A(inti¹=0,inti2=0){al=i1;a2=通过继承,类B具有两个同名成员函数void

print(){cout<<"a1="<<a1<<'It'<<};class

B:public

A{public:int

b1,b2;B(intj1=1,intj2=1){b1=j1;b2

voidprint()//定义同

{cout<<"b1="<<bl<<t'<<void

printAB(){A::print();

//派生类print();

//派生类};int

main(){Bb;

b.A::print()

;

b.printAB(;}华南理工大学计算机学院周霭如2025voidA::print();void

B::print();print(A*this);print(B*this

);/

/void//void{cout<<"a1="<<a1<<'It'<<};class

B:public

A{public:int

b1,b2;B(intj1=1,intj2=1){b1=j1;b2voidprint()//定义同

{cout<<"b1="<<bl<<'<<void

printAB({A::print();

//派生类print();

//派生类};int

main()class

A{public:int

a1,a2;A(inti¹=0,inti2=0){al=i1;a2=通过继承,类B具有两个同名成员函数void

print()>派生类也是基类,基类指针可以指向派生类对象>

派生类中定义与基类同名的成员函数,

称为重载成员函数#include<iostream>

//例8-4

2.

重名成员函数using

namespace

std;{Bb;

b.A::print()

;

b.printAB(;}华南理工大学计算机学院周霭如2025print(A*this);print(B*this

);voidA::print();void

B::print();//void//void8.2.3

派生类中访问静态成员基类定义的静态成员,将被所有派生类共享>

根据静态成员自身的访问特性和派生类的继承方式,在类层次

体系中具有不同的访问性质派生类中访问静态成员,用以下形式显式说明:类名::成员或通过对象访问

对象名.成员华南理工大学计算机学院周霭如2025using

namespace

std;class

B{public:static

voidAdd(){i++;}staticint

i;void

out(){cout<<"static

i="<<i<<endl;}};int

B::i=0;classD:privateB{public:void

f(){i=5;Add();B::i++;B::Add();int

main(){Bx;Dy;X.Add();x.out();y.f();cout<<"staticcout<<"static//cout<<"static//例8-5在派生类中访问静态成员#include<iostream>i="<<B::i<<endl;i="<<x.i<<endl;i="<<y.i<<endl;华南理工大学计算机学院周霭如2025void

out(){cout<<"static

i="<<i<<endl;}};int

B::i=0;class

D:private

B{public:void

f(){i=5;Add();B::i++;B::Add();#include<iostream>using

namespace

std;class

B{public:static

void

Add(){i++;}static

int

1;静态成员函数int

main(){Bx;Dy;X.Add();x.out();y.f();cout<<"staticcout<<"static//cout<<"static}i="<<B::i<<endl;i="<<x.i<<endl;i="<<y.i<<endl;11例18-5在派

生类中访问静态成员华南理工大学计算机学院周霭如2025voidout(){couk<<"static

i="<<i<<endl;}

};int

B::i=0;class

D:private

B{public:void

f(){i=5;Add();B::i++;B::Add();//例8-5在派生类中访问静态成员#include<iostream>using

namespace

std;class

B{public:static

void

Add({i++;}staticinti;x.out();y.f();cout<<"staticcout<<"static//cout<<"static}静态数据成员in(){Bx;Dy;

X.Add();i="<<B::i<<endl;i="<<x.i<<endl;i="<<y.i<<endl;华南理工大学计算机学院周霭如2025int

main(){Bx;Dy;X.Add();i="<<i<<endl;}i是类D的私有静态数据成员

类中可见coursstaticcout<<"static//cout<<"static}using

namespace

std;class

B{public:static

void

Add({i++;}static

int

i;void

out(){cout<<"static};int

B::i=0;class

D:private

B{public:void

fO{i=5;Add();B::i++;B::Add();//例8-5在派生类中访问静态成员#include<iostream>i="<<B::i<<endl;i="<<x.i<<endl;i="<<y.i<<endl;华南理工大学计算机学院周霭如2025using

namespace

std;class

B{public:static

void

Add(){i++;}static

int

i;void

out(){cout<<"static};int

B::i=0;class

D:private

Bint

main(){Bx;Dy;X.Add();i="<<i<<endl;}Add()

是类D的私有静态成员函数类中可调用DuauI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论