#include<iostream> using namespace std; class ClassA{ public: //**********found********** virtual void print( ) // 说明print函数为虚函数 { cout<<"ClassA"<<endl; } }; class ClassB:public ClassA{ public: void print( ) { cout<<"ClassB"<<endl; } }; //**********found********** void func(ClassA &t) { t.print(); } int main() { ClassA testa; ClassB testb; func(testa); func(testb); //**********found********** ClassA* p; // 定义指针p p=&testa; p->print(); //**********found********** p=&testb; p->print(); system("pause"); return 0; }请解释这个代码
时间: 2023-07-18 21:53:12 浏览: 107
使用include <iostream>时一定要加using namespace std
这段代码主要演示了虚函数的作用和多态的实现。
在 ClassA 类中声明了一个虚函数 print(),表示该函数可以被子类重写。在 ClassB 类中重写了 print() 函数,输出 "ClassB"。在 func() 函数中,参数为一个 ClassA 类的引用,通过该引用调用 print() 函数,由于 ClassB 是 ClassA 的子类,所以传递 ClassB 的对象时会调用 ClassB 中的 print() 函数,输出 "ClassB"。
在 main() 函数中,先创建了 ClassA 和 ClassB 的对象 testa 和 testb,分别调用 func() 函数,输出 "ClassA" 和 "ClassB"。然后定义了一个指向 ClassA 类对象的指针 p,并分别将其指向 testa 和 testb,调用 p->print() 函数,由于 p 指向的对象不同,因此输出结果也不同,分别输出 "ClassA" 和 "ClassB"。
这就是多态的实现,同一个函数在不同的对象上有不同的表现形式。
阅读全文