继承

  1. 继承:是面向对象的一种共享机制
    ——一个类共享另一个类的数据和方法
    被继承类:父类 基类
    继承类 :子类 派生类
    派生类继承基类的数据和方法
  2. 派生类在继承基类时,要继承基类的所有数据和方法
    派生类组成:①从基类继承的
    ②派生类自定义的数据和方法
  3. 继承表示:①定义基类:class 基类名{
    //基类定义;
    };
    ②定义派生类:class 派生类名:继承权限 基类名{
    //定义派生类自己的数据和方法;
    };
  4. 对派生类而言,一定是先继承,再自定义
    派生类的类体只表示派生类新加特性
  5. 继承权限:i:一个派生类要继承基类的所有数据和方法
    ii:公有继承(public):派生类在继承基类成员时,不改变基类成员的访问权限
    a>基类类外对象:访问基类公有
    b>基类成员:可访问:公有可访问全部
    受保护可访问受保护和私有
    私有只能访问私有
  6. 由于基类不从派生类继承,所有基类只可访问基类成员,不可访问派生类成员
    c>派生类类外对象:基类公有 派生类公有
    派生类成员:派生类的public:除基类私有外都可访问
    派生类的protected:可访问派生类的受保护,私有
    基类的protected
  7. 派生类继承基类私有,但不允许访问
    ——基类私有只可被基类成员访问
#include<iostream>
using namespace std;
class Base{
	private:
		int x,y;
	public:
		void fun()
		{
			cout<<"Base fun"<<endl;
		}
		void hun()
		{
			cout<<"Base hun"<<endl;
		}
}; 
class Derived:public Base{
	private:
		int x,z;
	public:
		void gun()
		{
			cout<<"Derived gun"<<endl;
		}
};
int main()
{
	Base objB;
	Derived objD;
	objB.fun();
	objB.hun();
	objD.fun();
	objD.hun();
	objD.gun();
}

  1. 就近原则:i>基类和派生类中有同名的方法
    ii>通过派生类对象调用同名方法时,就近原则优先生效,坚决调用派生类同名方法
  2. 过程:通过派生类对象调用方法时,系统先在派生类中查找是否有该方法:有,坚决调
    无,在基类中查找
  3. 若派生类对象在调用基类和派生类的同名成员时:
    直接调:objD.fun()——调派生类fun()
    加基类作用域:objD.Base::fun()——调基类fun()
  4. :: 类作用域运算符,最高优先级
#include<iostream>
using namespace std;
class Base{
	public:
		void fun()
		{
			cout<<"Base fun"<<endl;
		}
		void hun()
		{
			cout<<"Base hun"<<endl;
		}
}; 
class Derived:public Base{
	public:
		void fun()
		{
			cout<<"Derived fun"<<endl;
		 } 
		void gun()
		{
			cout<<"Derived gun"<<endl;
		}
};
int main()
{
	Derived objD;
	objD.fun();
	objD.hun();
	objD.gun();
	objD.Base::fun();
}
  1. 就近原则优先于访问权限,参数匹配检测之前完成
    派生类的同名方法中,若要调用基类同名方法,必须加基类作用域
  2. 指向派生类对象的指针:
    ①定义派生类指针:派生类名 *指针名;
    ②使派生类指针指向派生类对象:派生类指针名=&派生类对象名 / 派生类指针名=new 派生类名(实参)
    ③通过派生类指针引用方法:派生类指针名->方法名(实参);
#include<iostream>
using namespace std;
class Base{
	public:
		void fun()
		{
			cout<<"Base fun"<<endl;
		}
		void hun()
		{
			cout<<"Base hun"<<endl;
		}
}; 
class Derived:public Base{
	public:
		void fun()
		{
			cout<<"Derived fun"<<endl;
		 } 
		void gun()
		{
			cout<<"Derived gun"<<endl;
		}
};
int main()
{
	Base *pb1=new Base();
	Derived *pd1=new Derived();
	Base *pb2;
	Derived *pd2;
	pb2=pd1;
	pb1->fun();
	pd1->fun();
	pb2->fun();
}
  1. 赋值兼容规则:
    基类指针可以指向派生类对象:基类指针=&派生类对象名 / 基类指针=new 派生类名(实参)
    通过基类指针访问成员时,只可访问派生类从基类继承的成员
    派生类指针不可指向基类对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值