C++多态特性之派生与虚函数与模板详细介绍
1. 多态概念
多态(Polymorphism)是指同一个函数调用可以有不同的行为,即同一函数可以多次实现。C++中的多态性是实现面向对象程序设计中的重要特征,主要分为两种类型:
-
静态多态:又称为编译期多态,主要通过函数重载和运算符重载实现,主要在编译期间进行。
-
动态多态:又称为运行时多态,主要通过虚函数实现,主要在运行期间进行。
2. 派生
OOP(Object-Oriented Programming,面向对象编程)的基础是类,派生则是OOP中十分重要的概念。派生(Derivation)是指在一个已有类的基础上,建立一个新的类,新的类称为派生类(Derived Class),已有类称为基类(Base Class)。派生类能够继承实现了基类的成员函数和数据成员。派生类还可以在其上加入新的成员,或重新定义覆盖从基类中继承过来的成员函数。派生类对象既包含了基类的成员,也包含了派生类的成员。
例如,
class Base {
public:
void print();
};
class Derived : public Base {
public:
void print(); // 重新定义与基类同名函数
void display();
};
int main() {
Base* p = new Derived(); // 派生类可以转换为基类
p->print(); // 调用到派生类中的print()函数
delete p;
return 0;
}
这段代码建立了一个基类Base,其中包含一个print()函数,建立了一个派生类Derived,其中除了基类中的print()函数外,还包含了一个display()函数,并重新定义了print()函数。在main()函数中,创建了一个指向派生类的指针p,然后通过基类指针调用了print()函数,此时将会调用到派生类中重新定义的print()函数,实现了重载。
3. 虚函数
虚函数是动态多态的重要实现方式,在基类中通过virtual关键字声明,在派生类中通过override重新定义。在程序运行期间,运行时类型识别(RTTI)的机制会根据对象的实际类型,调用该类型对应的虚函数版本。这样就实现了同一个函数,根据不同对象的不同实现方式,执行不同的代码。虚函数可以被纯虚函数(Pure Virtual Function)替代,纯虚函数是指不实现函数体的虚函数。
例如,
class Base {
public:
virtual void print() {
cout << "Base::print()" << endl;
}
};
class Derived : public Base {
public:
void print() override {
cout << "Derived::print()" << endl;
}
};
int main() {
Base* p = new Base();
Base* q = new Derived();
p->print();
q->print();
delete q, p;
return 0;
}
这段代码建立了一个基类Base和一个派生类Derived,其中Base中包含了一个虚函数print(),Derived中重新定义了print(),然后在main()函数中,创建了一个基类指针p和一个指向派生类的基类指针q,分别调用了它们的print()方法,运行结果会输出“Base::print()”和“Derived::print()”,这就实现了动态多态。
4. 模板
模板是指通用编程代码,可以用于不同的数据类型。模板可以分为函数模板和类模板两种类型。在模板中,可以在函数或类定义中声明类型参数,代表了将来实例化模板时要用的类型。这样模板可以大大提供了程序复用性,同时也方便了程序员的编写。
例如,下面的代码片段演示了模板函数的使用:
template<class T>
T add(T a, T b) {
return a + b;
}
int main() {
int c = add(1, 2);
double d = add(1.1, 2.2);
cout << c << endl << d << endl;
return 0;
}
这段代码定义了一个模板函数add(),其中注意到使用了template关键字,后面跟着一个类型参数T。该函数的代码实现中,使用了类型参数T,这就表示将来可以调用这个函数的时候,传进去两个不同的类型参数T,例如上面的c和d所对应的类型分别是int和double。运行该程序,输出结果为:
3
3.3
总结
本篇攻略介绍了C++中派生和虚函数两种重要的多态性实现方式,同时也对模板进行了简单的介绍。在实际代码编写中,可以结合派生、虚函数和模板等多种特性,实现更优秀的程序设计。
示例1中,通过一段派生类的代码,演示了派生的基本操作和实现,通过创建指向派生类的基类指针,实现了重载的多态性特性。
示例2中,通过一段虚函数的代码,演示了虚函数的基本操作和实现,通过虚函数,实现了动态多态性特性。
通过本篇攻略的介绍,相信读者已经掌握了C++中派生、虚函数和模板这些重要的多态性实现特性,可以在实际使用中更加灵活地应用这些特性,提高程序的可复用性和效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++多态特性之派生与虚函数与模板详细介绍 - Python技术站