一派生类概念:
1继承:在定义一个新类b时,如果b拥有某个已知的类a的全部特点,那么可以把a作为一个基类(父类),b作为基类的派生类(子类).
2派生类: 格式: 类名:public 基类名. 在派生类中,可以扩充新的成员变量和成员函数,派生类有基类的全部成员变量和成员函数,但在派生类中,无法访问基类的私有成员.
3派生类的体积为基类的体积+派生类自己成员变量的体积
4写基类:基类包为所有事物的共同特点,对于每种事物在为其派生.
二类之间的关系:
1继承关系:例如有一个基类a,其派生类b,逻辑上一个b对象也是一个a对象.(通俗来说,基类可以比喻成学生,它的一个派生类可以比喻成大学生,那么一个大学生是一个学生,但一个学生未必是大学生.)
2复合关系:类b的对象是类a中一个成员变量,b对象是a对象的组成部分.
三覆盖:
1概念:派生类可以定义一个和基类成员同名的成员.
在派生类中访问这类成员时,缺省的情况(无声明即默认)是访问派生类中定义的成员,若想在派生类中访问基类定义的同名成员时,要用作用域::.
class base{
private:
int i;
public:
int j;
void fun();//同名
};
class paisheng:public base{//派生类
public:
void acc();//派生类的成员函数
void fun();//覆盖基类
};
void paisheng::acc(){
i=1;//编译错误,派生类的成员函数不能访问基类的私有成员
fun();//调用缺省函数,那就调用派生类的
base::fun();//调用基类的
}
/*总结访问基类成员:
基类的私有:
基类的成员函数
基类的友元函数
基类的共有:
基类的成员,友元
派生类的成员,友元
其他.
基类的保护:
基类的成员函数
基类的友元函数
派生类的成员函数可访问当前对象的基类的保护 *
*/
保护成员:
对于 "派生类的成员函数可访问当前对象的基类的保护成员" ,有以下举例:
class base{
protected:
int pro;
};
class pai:public base{
public:
void fun(){
pro=1;
//ok假如pai类定义了个对象b,b调用这个fun函数,b访问它的基类可以
pai a;
//a是原b类中定义的一个pai类,a不是当前对象,不可访问
a.pro=1//编译错误
}
};
四派生类的构造函数:
1作用:如果基类中有自己的构造函数(即编译器不会再自动生成),那么在派生类中如果不定义个构造函数, 基类的初始化就无法进行,会发生编译错误.
2实例:
#include <bits/stdc++.h>
using namespace std;
class stu{
private:
string name;int age;
public:
int school;
stu(string a,int b):name(a),age(b){}
display(){
cout<<name<<endl<<age<<endl;
}
};
class bigstu:public stu{
private:
string major;
public:
bigstu(string a,int b,string c):stu(a,b),major(c){}
//派生类的构造函数,基类的私有成员只能用初始化列表初始化
display(){
stu::display();
cout<<major;
}
};
int main(){
bigstu a1("qq",12,"aq");
a1.display();
return 0;
}
先调用基类的构造函数再调用派生类的构造函数.如果派生类中有成员对象,则先执行基类,再成员对象,最后派生类.