如何通过长尾词体现类和对象的多态性?

2026-04-12 02:191阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计839个文字,预计阅读时间需要4分钟。

如何通过长尾词体现类和对象的多态性?

多态C++面向对象三大特性之一+多态分为两类+1.静态多态:函数重载和运算符重载属于静态多态,复用函数名+2.动态多态:通过派生类和虚函数实现运行时多态。静态多态和动态多态的区别+静态多态在编译时确定多态行为,动态多态在运行时确定多态行为。

多态是C++面向对象三大特性之一

多态分为两类

1.静态多态:函数重载 和 运算符重载属于静态多态,复用函数名

2.动态多态:派生类和虚函数实现运行时多态。

静态多态和动态多态的区别:

静态多态的函数地址早绑定-编译阶段确定函数地址。

动态多态的函数地址晚绑定-运行阶段确定函数地址。


动态多态满足条件

1.存在继承关系

2.子类重写父类的虚函数

重写 函数返回值类型 函数名 参数列表 完全相同

动态多态使用

父类指针或引用 指向子类对象

例子:

son1类和son2类是person类的子类,并且person是抽象类

son1 a;

son2 b;


person& p = a;

p.speak();

person* p1 = new son2;

如何通过长尾词体现类和对象的多态性?

p1->speak();


person* p2 = &b;

p1->speak();


多态的优点

1.代码组织结构清晰

2.可读性强

3.利于前期和后期的扩展以及维护。

总结:C++开发提倡利用多态设计程序架构,因为多态优点很多


纯虚函数和抽象类

纯虚函数语法:virtual 返回值类型 函数名 (参数列表)=0;

当类中有了纯虚函数,这个类也称为抽象类。

抽象类的特点:

1.无法实例化对象

2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类。


虚析构和纯虚析构

目的:多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。

共性:

1.可以解决父类指针释放子类对象

2.都需要具体函数实现

区别:

如果是纯虚析构,该类属于抽象类,无法实例化对象。

语法:

虚析构:virtual ~类名() {}

纯虚析构:virtual ~类名()=0; //在类内声明

类名:: ~类名(){} //在类外实现

总结:

1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象。

2.如果子类中没有堆区数据, 可以不写为虚析构或纯虚析构。

3.拥有纯虚析构的类和拥有纯虚函数的类一样都属于抽象类。

本文共计839个文字,预计阅读时间需要4分钟。

如何通过长尾词体现类和对象的多态性?

多态C++面向对象三大特性之一+多态分为两类+1.静态多态:函数重载和运算符重载属于静态多态,复用函数名+2.动态多态:通过派生类和虚函数实现运行时多态。静态多态和动态多态的区别+静态多态在编译时确定多态行为,动态多态在运行时确定多态行为。

多态是C++面向对象三大特性之一

多态分为两类

1.静态多态:函数重载 和 运算符重载属于静态多态,复用函数名

2.动态多态:派生类和虚函数实现运行时多态。

静态多态和动态多态的区别:

静态多态的函数地址早绑定-编译阶段确定函数地址。

动态多态的函数地址晚绑定-运行阶段确定函数地址。


动态多态满足条件

1.存在继承关系

2.子类重写父类的虚函数

重写 函数返回值类型 函数名 参数列表 完全相同

动态多态使用

父类指针或引用 指向子类对象

例子:

son1类和son2类是person类的子类,并且person是抽象类

son1 a;

son2 b;


person& p = a;

p.speak();

person* p1 = new son2;

如何通过长尾词体现类和对象的多态性?

p1->speak();


person* p2 = &b;

p1->speak();


多态的优点

1.代码组织结构清晰

2.可读性强

3.利于前期和后期的扩展以及维护。

总结:C++开发提倡利用多态设计程序架构,因为多态优点很多


纯虚函数和抽象类

纯虚函数语法:virtual 返回值类型 函数名 (参数列表)=0;

当类中有了纯虚函数,这个类也称为抽象类。

抽象类的特点:

1.无法实例化对象

2.子类必须重写抽象类中的纯虚函数,否则也属于抽象类。


虚析构和纯虚析构

目的:多态使用时,如果子类中有属性开辟到堆区,那么父类指针在释放时无法调用到子类的析构代码。

共性:

1.可以解决父类指针释放子类对象

2.都需要具体函数实现

区别:

如果是纯虚析构,该类属于抽象类,无法实例化对象。

语法:

虚析构:virtual ~类名() {}

纯虚析构:virtual ~类名()=0; //在类内声明

类名:: ~类名(){} //在类外实现

总结:

1.虚析构或纯虚析构就是用来解决通过父类指针释放子类对象。

2.如果子类中没有堆区数据, 可以不写为虚析构或纯虚析构。

3.拥有纯虚析构的类和拥有纯虚函数的类一样都属于抽象类。