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继承的赋值兼容规则

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

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尽力回答你关于C++继承派生的问题。 首先,让我们考虑一个基础类——人员类(People),它应该包括人员的基本属性,例如姓名、性别、年龄等等。我们可以定义如下的类: ```c++ class People { public: People(string name = "", char gender = ' ', int age = 0) : m_name(name), m_gender(gender), m_age(age) {} void setName(string name) { m_name = name; } void setGender(char gender) { m_gender = gender; } void setAge(int age) { m_age = age; } string getName() const { return m_name; } char getGender() const { return m_gender; } int getAge() const { return m_age; } private: string m_name; char m_gender; int m_age; }; ``` 接下来,我们可以从人员类派生出学生类(Student)。学生类应该包括人员类的所有属性,同时还应该包括学生特有的属性,例如学号、班级等等。我们可以定义如下的类: ```c++ class Student : public People { public: Student(string name = "", char gender = ' ', int age = 0, int studentID = 0, string className = "") : People(name, gender, age), m_studentID(studentID), m_className(className) {} void setStudentID(int studentID) { m_studentID = studentID; } void setClassName(string className) { m_className = className; } int getStudentID() const { return m_studentID; } string getClassName() const { return m_className; } private: int m_studentID; string m_className; }; ``` 在学生类中,我们使用了关键字 `public`,这意味着学生类继承了人员类的所有公有成员。因此,在学生类的构造函数中,我们可以通过调用人员类的构造函数来初始化人员类的数据成员。 在学生类中,我们还定义了学生特有的数据成员,例如 `m_studentID` 和 `m_className`。我们还定义了一些成员函数,用于设置和获取这些数据成员。 使用上述代码,我们可以创建人员对象和学生对象,并使用它们的成员函数来设置和获取它们的属性。例如: ```c++ People p("Tom", 'M', 20); Student s("Alice", 'F', 18, 12345, "Class 1"); cout << p.getName() << " " << p.getGender() << " " << p.getAge() << endl; cout << s.getName() << " " << s.getGender() << " " << s.getAge() << " " << s.getStudentID() << " " << s.getClassName() << endl; ``` 输出结果为: ``` Tom M 20 Alice F 18 12345 Class 1 ``` 希望这个例子对你理解C++继承派生有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值