c++继承和派生

继承

在定义一个新的类B时,如果该类与某个已有的类A相似(B拥有A的全部特点),就可以把A作为一个基类,而把B作为基类的一个派生类(子类)

派生类

特点:

①基类进行修改和扩充,在派生类中,可以扩充新的成员变量的成员函数。

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

③派生类拥有积累的全部成员函数和成员变量,不论是private、protected、public。

派生类的各个成员函数中,不能访问基类的private成员。

写法:

class 派生类名 : public 基类名

{

};

例如:

//基类
class CStudent{
	private:
		int nAge;
	public:
	bool IsThreeGood()   {};
	void SetName(const string & name){
		sName=name;
	}
	//......
};
//派生类
class UnderGraduateStudent:public CStudent{
	private:
		int nDepartment;
	public:
		bool IsThreeGood()   {.......};   //覆盖
		bool CanBaoYan()     {.......};     
}; 
//派生类2
class CGraduateStudent:public CStudent{
	private:
		int nDepartment;
		char szMentorName[20];
	public:
		int CountSalary()   {.......};
}; 

派生类对象的内存空间

派生类对象的体积,等于基类对象的体积加上派生类对象自己的成员变量的体积。

继承关系和复合关系

继承:“是”关系

复合:男人和女人复合出人;几何形体程序中:“点”类和“圆”类为复合关系:每一个“圆”对象里面都包含一个“点”对象,这个点对象就是圆心。

class CPoint 
{
	double x,y;
    friend class CCircle;   //把CCircle类变成友元,CCircle便于使用CPoint里的x,y(圆心)
};


class CCircle
{
	double r;
	CPoint center;
};

覆盖和保护成员

覆盖

这里强调一下:一般不要定义与基类变量相同的派生类变量。但可以定义与基类相同的函数成员(覆盖)。

保护成员 protected

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

-基类的成员函数

-基类的友元函数

 

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

-基类的成员函数

-基类的友元函数

-派生类的成员函数

-派生类的友元函数

-其他函数

 

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

-基类的成员函数

-基类的友元函数

-派生类的成员函数可以访问当前对象的基类的保护成员

 

派生类的构造函数

  在创建派生类的对象时,需要调用基类的构造函数:初始化派生类对象中基类继承的成员。在执行一个派生类的构造函数之前,总是先访问基类的构造函数。派生类的析构函数被执行时,执行完派生类的析构函数后,自动调用基类的析构函数。

public继承的赋值兼容规则

c++继承和派生_第1张图片

课件ppt来源于:MOOC 北京大学 郭炜老师

 

你可能感兴趣的:(c++继承和派生)