C++继承总结

继承是面向对象程序设计中软件重用的关键技术。继承机制使用已定义的类作为基础建立新的类定义,新的类是原有类的数据及操作与新类所增加的数据及操作的组合。新的类把原有的类作为基类引用,而不需要修改原有类的定义。新的类作为派生类引用。这种可扩充、可重用技术大大降低了大型软件的开发难度。


C++中描述类继承关系的语句格式为

class 派生类名 : 基类名表

{

数据成员和成员函数说明

}

其中,基类名表的语句格式如下

访问控制 基类名1,访问控制 基类名2,。。。,访问控制 基类名n

用于表示当前定义的派生类的各个基类。如果一个基类名表中只有一个基类,则表示定义的派生类只有一个基类,称为单继承;如果一个基类名表中有多个基类,则称为多继承

 访问控制是表示继承权限的关键字,称为访问描述符。可以是

public 公有继承

private 私有继承

protected 保护继承

如果省略访问描述符,则C++认为是私有继承,其中,公有继承是最为常用的继承方式

一个派生类公有继承一个基类时,基类中所有公有成员(由public定义的数据成员或成员函数)成为派生类的共有成员,基类中所有的保护成员成为派生类的保护成员。

例程

class A

{

public :

void get_XY()

{

cout<<"Enter two numbers of x,y";

cin>>x>>y;

}

void put_XY()

{

cout<<"x="<<x<<",y="<<'\n';

}

protected:

int x,y;

};

class B:public A

{

public :

int get_S()

{return s;}

void make_S()

{s =x * y;}

protected:

int s;

};

基类的初始化

构造函数名(变元表):基类(变元表),数据成员1(变元表),。。。,数据成员n(变元表)

{}

例程

class Point

{

public:

Point (double t1,double t2)

{

x= t1;

y=t2;

}

void OutPoint()

{cout<<"Point:x="<<x<<"y="<<y<<endl;}

protected:

double x,y;

};

class Circle : public Point

{

public:

Circle (double t1,double t2,double t3)

         :Point(t1,t2)

{radius = t3;}

void OutCircle()

{Point :: OutPoint();

  cout<<""radius="}

}

重名成员

C++允许派生类的成员与基类成员重名。派生类中访问重名成员时,屏蔽基类的同名成员,如果要在派生类中使用基类的同名成员,可以显式地使用作用域符指定,格式如下:

类名::成员

派生类中访问静态成员

如果在基类中定义了静态成员,这些静态成员将在整个类体系中被共享,根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质

例程

#include<iostream>

using namespace std;

class B

{

public :

static void Add()

{i++;}

static int i;

void out()

{cout<<"static i = "<<i<<endl;}

};

int B::i = 0;

class D:private B

{

public :

void f();

};

void D::f()

{

i=5;

Add();

B::i++;

B::Add();

}

int main()

{

B x;

D y;

x.Add();

x.out();

y.f();

cout<<"static i = "<<B::i<<endl;

cout<<"static i = "<<x.i<<endl;

//cout<<"static i="<<y.i<<endl;

}

程序运行结果:

static i=1

static i=8

static i=8

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值