没有合适的资源?快使用搜索试试~ 我知道了~
C++ 中virtual 虚函数用法深入了解
5星 · 超过95%的资源 2 下载量 176 浏览量
2020-12-17
07:39:16
上传
评论
收藏 63KB PDF 举报
温馨提示
试读
3页
一、virtual修饰基类中的函数,派生类重写该函数: #include using namespace std; class A{ public: virtual void display(){ cout<<"A"<<ENDL>display(); delete p; } int main(int argc,char* argv[]) { doDisplay(new B()); retu
资源推荐
资源详情
资源评论
C++ 中中virtual 虚函数用法深入了解虚函数用法深入了解
一、一、virtual修饰基类中的函数,派生类重写该函数:修饰基类中的函数,派生类重写该函数:
#include
using namespace std;
class A{
public:
virtual void display(){ cout<<"A"<<ENDL; }
};
class B : public A{
public:
void display(){ cout<<"B"<<ENDL; }
};
void doDisplay(A *p)
{
p->display();
delete p;
}
int main(int argc,char* argv[])
{
doDisplay(new B());
return 0;
}
这段代码打印出的结果为B,但是当把A类中的virtual去掉之后打印出的就为A。
当基类中没有virtual的时候,编译器在编译的时候把p看做A类的对象,调用的自然就是A类的方法。
但是加上virtual之后,将dispaly方法变成了虚方法,这样调用的时候编译器会看调用的究竟是谁的实例化对象,这样就实现了
多态的效果。
也就是说,当基类的派生类中有重写过基类的虚方法的时候,使用基类的指针指向派生类的对象,调用这个方法实际上调用的
会是派生类最后实现的方法
二、派生类二、派生类virtual 继承基类继承基类
#include
using namespace std;
class Person{
public: Person(){ cout<<"Person构造"<<ENDL; }
~Person(){ cout<<"Person析构"<<ENDL; }
};
class Teacher : virtual public Person{
public: Teacher(){ cout<<"Teacher构造"<<ENDL; }
~Teacher(){ out<<"Teacher析构"<<ENDL; }
};
class Student : virtual public Person{
public: Student(){ cout<<"Student构造"<<ENDL; }
~Student(){ cout<<"Student析构"<<ENDL; }
};
class TS : public Teacher, public Student{
public: TS(){ cout<<"TS构造"<<ENDL; }
~TS(){ cout<<"TS析构"<<ENDL; }
};
int main(int argc,char* argv[])
{
TS ts;
return 0;
}
1)这段代码的终端输出结果为:)这段代码的终端输出结果为:
Person构造
Teacher构造
Student构造
TS构造
TS析构
Student析构
Teacher析构
Person析构
2)当)当Teacher类和类和Student类没有虚继承类没有虚继承Person类的时候,也就是把类的时候,也就是把virtual去掉时候终端输出的结果为:去掉时候终端输出的结果为:
weixin_38602098
- 粉丝: 3
- 资源: 963
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页