OOP4 – 多态与虚函数

C++程序设计中:指具有不同功能的函数可以用同一个函数名

面向对象方法中:多态性是指发出同样的消息,不同类型的对象接收时会产生不同的行为。

可以通过函数的重载,运算符的重载,虚函数实现

从系统实现的角度看,多态性分为两类:

静态关联与动态关联

虚函数

//通过各自对象调用函数
int main()
{ Student stud1(1001,"Li",87.5);
Graduate grad1(2001,"Wang",98.5,563.5);
stud1.display();
grad1.display();
}
//通过各自指针调用函数
int main()
{ Student stud1(1001,"Li",87.5);
  Graduate grad1(2001,"Wang",98.5,563.5);
  Student  *pt; 
  pt=&stud1;
  pt->display(); 
  Graduate *ptr;
  ptr=&grad1;
  ptr->display();
 }

每个派生类都有同名的 display()函数,需要定义多个指向各派生类的指针。太麻烦了,虚函数通过指向基类的指针调用函数

int main()
{ Student stud1(1001,"Li",87.5);
  Graduate grad1(2001,"Wang",98.5,563.5);
  Student  *pt;               //定义pt为指向基类的指针
  pt=&stud1;                  //pt指向基类对象
  pt->display(); 
  pt=&grad1;                  //pt为指向派生类对象
  pt->display();
  return 0;
 }

允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用访问基类和派生类中的同名函数。

由虚函数实现的动态多态性就是:同一类族中不同类的对象,对同一函数调用作出不同反应。

虚函数的使用方法:

虚析构函数

构造函数不能声明为虚函数。


class Point
{public:
  Point(){}
  ~Point(){cout<<"executing Point destructor"<<endl;}
};
class Circle:public Point
{public:
Circle(){}
~Circle(){cout<<"executing Circle destructor"<<endl;}
private:
int radius;
};
int main()
{Point *p=new Circle;
 delete p;//executing Point destructor
 return 0;
}

如果希望执行派生类Circle的析构函数,可以将基类的析构函数声明为虚析构函数virtual ~Point()

当基类的析构函数为虚函数时,无论指针指的是同一类族中哪一个类的对象,当对象撤销时,系统会采用动态关联,调用相应的析构函数,对该对象进行清理工作。

如果基类中的函数被声明为 virtual,那么在派生类中即使没有再写 virtual,它也仍然是虚函数

纯虚函数与抽象类

纯虚函数指在声明虚函数时被“初始化”为0的函数。形如,virtual 函数类型 函数名(参数列表)=0;
如,virtual double area() =0;
或,virtual double area() const =0;

抽象类:不是用来定义对象而只作为一种基本类型用作继承的基类。

凡是包含纯虚函数的类都是抽象类。

抽象类不能定义对象,但可以定义指向抽象类的指针。

学习笔记如有侵权,请提醒我,我会马上删除
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇