C++ 程序设计 week 5 继承和派生

继承和派生

定义:

继承:在定义一个新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为基类的一个派生类(也称子类)。


 派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。

 派生类一经定义后,可以独立使用,不依赖于基类。


写法:

class 派生类名:public 基类名

{


};


例子:

A类: Student:

B类: college student, graduate student

#include <iostream>
#include <string>
using namespace std;
class CStudent
{
 private:
 	string name;
 	string id; //学号
 	char gender; //性别,'F'代表女,'M'代表男
 	int age;
 public:
 	void PrintInfo();
 	void SetInfo( const string & name_,const string & id_,
	int age_, char gender_ );
 	string GetName() { return name; }
};
void CStudent::PrintInfo()
{
cout << "Name:" << name << endl;
cout << "ID:" << id << endl;
cout << "Age:" << age << endl;
cout << "Gender:" << gender << endl;
}
void CStudent::SetInfo( const string & name_,const string & id_,
 int age_,char gender_ )
{
name = name_;
id = id_;
age = age_;
gender = gender_;w
}
class CUndergraduateStudent:public CStudent
{//本科生类,继承了CStudent类
 private:
string department; //学生所属的系的名称
 public:
void QualifiedForBaoyan() { //给予保研资格
cout << “qualified for baoyan” << endl;
}
void PrintInfo() {
CStudent::PrintInfo(); //调用基类的PrintInfo
cout << “Department:” << department <<endl;
}
void SetInfo( const string & name_,const string & id_,
int age_,char gender_ ,const string & department_) {
CStudent::SetInfo(name_,id_,age_,gender_); //调用基类的SetInfo
department = department_;
}
};
int main()
{
 CUndergraduateStudent s2;
 s2.SetInfo(“Harry Potter ”, “118829212”,19,‘M’,“Computer Science”);
 cout << s2.GetName() << “ ” ;
 s2.QualifiedForBaoyan ();
 s2.PrintInfo ();
 return 0;
}
<pre name="code" class="cpp">Harry Potter qualified for baoyan
Name:Harry Potter
ID:118829212
Age:19
Gender:M
Department:Computer Science

 

 
 
 
 

2. 继承关系和复合关系

继承: 是的关系

复合: 有的关系


3. 访问范围说明符: private,  public

基类的private成员: 

可以被下列函数访问

• 基类的成员函数

• 基类的友员函数

基类的public成员:

可以被下列函数访问

• 基类的成员函数

• 基类的友员函数

• 派生类的成员函数

• 派生类的友员函数

• 其他的函数


访问范围说明符: protected

基类的protected成员: 可以被下列函数访问

• 基类的成员函数

• 基类的友员函数

• 派生类的成员函数可以访问当前对象的基类的保护成员(内部)


4. 构造函数以及调用顺序

先调用基类构造函数, 再调用子类构造函数

先调用子类构析函数, 在调用基类构析函数

构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。



5.小结

继承函数和成员

成员的可见性: protected, private,public

函数的修改性: 可以覆盖父类的函数

何时建立继承, 何时建立复合











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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值