派生类,覆盖,派生类的构造函数

一派生类概念:

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;
}

先调用基类的构造函数再调用派生类的构造函数.如果派生类中有成员对象,则先执行基类,再成员对象,最后派生类.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值