『C++学习录』多态性

多态性

一、多态性概念

1.实现方法:

函数重载/运算符重载

虚函数

2.运算符重载

1)规则和限制

【.类属关系/*指针/::作用域分辨/?:三目/sizeof】不能重载

只能重载C++已有运算符

不改变运算符优先级、结合性、操作数个数

经过重载,操作数至少一个是自定义(class/struct)

2)形式
a)重载为类成员函数

参数个数=原操作数个数-1

b)重载为友元函数

参数个数=原操作数个数

3)运算符成员函数设计
a)二元运算符

a+b == A::operator+(Type b)

b)前置一元运算符

-a == a.A::operator-()

++a == a.A::operator++()

c)后置一元运算符

#有一个整型参数,但未用(形参列表加Int)

a-- == a.A::operator–(0)

4)运算符友元函数

a+b == operator+(a,b)

++a == operator++(a)

a++ == operator++(a,0)

二、类型兼容

class CB0//基类
{
	public:
	void display(){...}
	void func_b0(){...}
}
class CB1 : public CB0//派生类
{
	public:
	void display(){...}
	void func_b1(){...}
}
class CD : public CB1//派生类
{
	public:
	void display(){...}
	void func_d(){...}
}


三、 虚函数

1.虚函数

//work()定义为虚成员函数
Student a;
Programer b;
Human *p;

p = &a;
a.work();
p->work();

p = &b;
b.work();
p->work;

2.虚成员函数

非静态的成员函数

virtual声明

派生类可以对基类虚函数重写,而不是重载

class MobilePhone : public Phone()
{
	public:
	virtual int dial(int number);
	virtual int hangup();
...	
};
int MobilePhone :: dial(int number)
{
...
}
int MobilePhone : hangup()
{
...
}

3.静态联编和动态联编

1)先前联编/静态

编译时确定调用特定类的特定方法

2)迟后联编/动态

运行时动态确定哪一个类被调用

4.指向父类的指针

1)派生类指针和基类指针值相等,用这两个指针调用基类的虚方法等价
2)多重继承
class student
{

};
class programmer
{
};
class student_programmer:
public student,pubilc programmer
{

};

3)虚析构函数

通过基类指针删除派生类的对象时

允许他人通过基类指针调用对象的析构函数

5.抽象类

1)抽象类

带有纯虚函数的类叫抽象类

2)纯虚函数

基类中说明的,未定义具体内容,派生自定义

class 类名
{
	virtual 类型 函数名(参数表)=0;
	//纯虚函数,只定义方法调用的格式
	。。。
}
...
class B0//抽象基类B0声明
{
public://外部接口
virtual void display() = 0;//纯虚函数成员
};
class B1 : public B0//派生类
{
public:
void display(){cout<<"B1::display()"<<endl;}//虚成员函数
};
class D1 : public B1//派生类
{
public:
void display(){cout<<"D1::display()"<<endl;}//虚成员函数
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值