您的位置:首页 > 编程语言 > C语言/C++

(C++基础)浅谈继承与派生

2017-03-16 20:54 190 查看
C++是门面向对象的编程语言,四个主要特点:抽象、封装、继承、派生。

C++中可重用性是通过“继承”这一机制来实现的,因此继承是C++的一个重要组成部分。

一  什么是继承?

         比如一个类里面有学生的基本信息,学号,姓名,性别等,学校的某个部门需要用到学号,姓名,性别以外还需要 用到年龄地址等等,如果重新声明一个类重新定义这些东西会很繁琐,很有可能使你搞混了谁是谁,此时就可以用到继承了,可以继承之前类的信息,并且可以在新的类中声明新的变量方法等。继承哪个类哪个类就叫“基类”,新的类就是“派生”类。

二  派生类的声明方式

class Student
{
int num;
string name;
char sex;
};
class Student1 :public Student //声明基类是谁
{
public:
void display()            //派生类中新增加的函数
{
}
}

注:派生类继承了基类除了构造函数与析构函数之外的所有成员!

三  派生类的访问属性

在基类的访问属性继承方式在派生类中的访问属性
private public不可访问
privateprivate不可访问
private protected不可访问
publicpublicpublic
publicprivateprivate
public protectedprotected
protectedpublicprotected
protectedprivateprivate
protectedprotectedprotected

四   派生类的构造函数与析构函数

用户在定义类的时候可以不声明但是每个类都有个默认的构造函数,空函数,没啥用。如果想对类中的数据成员初始化就需要自己定义构造函数。

4.1简单派生类的构造函数

class Student
{
public:
Student(int n, string nam, char s)
{
num = n;
name = nam;
sex = s;
}
int num;
string name;
char sex;
};
class Student2:public Student
{
public:
Student(int n, string nam, char s, int a, string ad) :Student(n, nam, s)//定义派生类构造函数
{
age = a;                     //在函数体内只对派生类新增的数据成员初始化   注:因为这里是调用基类的构造函数
addr = ad;                   //所以(n,nam,s)没有类型,因为他们是实参,不是形参

}
private:
int age;
string addr;

}


4.2    有子对象的派生类构造函数

派生类中需要一个班长,班长的信息和他们一样,属性和他们一样,则在派生类中定义一个对象,此时要在声明派生类构造函数的同时对班长初始化,如下:
class Student
{
public:
Student(int n, string nam, char s)
{
num = n;
name = nam;
sex = s;
}
int num;
string name;
char sex;
};
class Student2:public Student
{
public:
Student(int n, string nam char s,int n1,string nam1,char s1, int a, string ad) :Student(n, nam, s),duixiang(n1,nam1,s1)/
{
age = a;	//这个对象的初始化就如此,不知道该怎么解释,自己看吧。。。
addr = ad;
}
private:
int age;
string addr;
student duixiang;

}


五  析构函数 

 因为派生类不能继承基类的析构函数,所以需要派生类的析构函数去调用基类的析构函数。在对派生类清理的时候会自动调用基类的构造函数,对基类和子对象进行清理。
清理顺序:
       先执行派生类的的析构函数,对派生类增加的成员进行清理,再进行子对象的析构函数,最后调用基类的析构函数。
注意:
      多重继承的时候,声明方式,构造函数的形式与单继承一样,就是加个:Student(n,a,s)。特殊情况特殊处理。

                                                                                                                                                                                                         2017年3月16日20:54:11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: