- 5
- 0
- 约6.19千字
- 约 11页
- 2016-08-21 发布于重庆
- 举报
第19讲(派生类的构造函数和析构函数)
第19讲
教学内容
7.4 派生类的构造和析构函数
7.4.1构造函数
7.4.2 拷贝构造函数
7.4.3析构函数
教学重点和难点
1派生类的构造函数和析构函数的一些特点
教学方法:
通过程序举例演示,讲解基类有默认构造函数和无默认构造函数时,派生类的构造函数的特点,在此基础上,讲解派生类的析构函数。
教学学时
2 学时
教学过程
一派生类的构造函数的特点:
1 当基类中声明有默认形式的构造函数或未声明构造函数时,派生类构造函数可以不向基类构造函数传递参数。
2 当基类没有默认构造函数时,派生类应声明带形参的构造函数,派生类的构造函数需要给基类的构造函数传递参数
由于基类的构造函数和析构函数不能被继承,在派生类中,如果对派生类新增的成员进行了初始化,派生类的构造函数只负责对新增的成员进行初始化,对所有从基类继承下来的成员,其初始化工作还是由基类的构造函数来完成。
3派生类的构造函数的语法形式:
?派生类名(基类所需的形参,本类成员所需的形参):基类名(参数表)
?{
? 派生类新增成员的初始化赋值语句;
?};
4 当有内嵌对象的时:
派生类名(参数总表):基类名1(参数), 基类名2(参数), ...基类名n(参数),对象数据成员的初始化
{
派生类新增成员的初始化赋值语句;
};
//程序举例:
#include iostream.h
#include string.h
class People
{
private:
char m_name[20];
protected:
char m_address[40];
public:
void SetPeopleData(char name[20],char address[40]);
char * GetName();
char *GetAddress();
void ShowInfo();
People(char name[20]=Noname ,char address[40]=Noaddress);
};
People::People(char name[20],char address[40])
{
SetPeopleData(name,address);
}
void People::SetPeopleData(char name[20],char address[40])
{
strcpy(m_name,name);
strcpy(m_address ,address);
}
char * People::GetName() { return m_name;}
char * People::GetAddress() { return m_address;}
void People::ShowInfo()
{
cout 姓名:m_name endl;
cout 家庭地址:m_address endl;
}
class Student:public People
{
private:
int m_ID;
public:
void SetStudentData(char name[20],char address[40],int ID);
int GetID();
void ShowInfo();
Student(char name[20],char address[40],int ID);
};
/*Student::Student(char name[20],char address[40],int ID)
在派生类的构造函数中,隐式调用基类的构造函数
{
SetPeopleData(name,address);
m_ID = ID;
} *///上面的构造函数是当基类有默认构造函数时
/*Student::Student(char name[20],char address[40],int ID)
:People(name,address)
//采用初始化列表的方式显式调用基类的构造函数
{
m_ID = ID;
}//上面的构造函数是当基类没有默认构造函数时
void Student::SetStudentData(char name[20],char address[40],int ID)
{
SetPeopleData(name,address);
m_ID = ID;
}
int Student::GetID() { return m_ID;}
void Student::ShowInfo()
{
People::ShowInfo();
cout
原创力文档

文档评论(0)