C++虚函数实现动态多态运行
2011-07-08 16:36
302 查看
#include<iostream>
using namespace std;
class A
{
int a;
public:
virtual void fun(){cout<<"调用A::fun()"<<endl;cout<<"a="<<a<<endl;} //如果没有virtual
A(int tmp=111){a = tmp;cout<<"调用A构造函数"<<endl;}
};class B:public A
{
int b;
public:
void fun()
{
cout<<"调用B::fun()"<<endl;
cout<<"b="<<b<<endl;
}
B(int tmp=2)//:A(tmp)
{
b = tmp;cout<<"调用B构造函数"<<endl;
}
};int main()
{
B* b=new B();
A *tmpa;
tmpa = b;
tmpa->fun();
//delete a;
delete b;
return 0;
}编译后运行结果:[student@SEP4020 testc++]$ ./xxx
调用A构造函数
调用B构造函数
调用B::fun()
b=2 但是如果把类A中的virtual关键字去掉的运行结果:[student@SEP4020 testc++]$ ./xxx
调用A构造函数
调用B构造函数
调用A::fun()
a=111由此可知,将派生类对象地址赋值给一个基类指针,由虚函数可实现C++的运行时多态性,尽管调用形式会一样,但是却调用的不同对象中的虚函数
using namespace std;
class A
{
int a;
public:
virtual void fun(){cout<<"调用A::fun()"<<endl;cout<<"a="<<a<<endl;} //如果没有virtual
A(int tmp=111){a = tmp;cout<<"调用A构造函数"<<endl;}
};class B:public A
{
int b;
public:
void fun()
{
cout<<"调用B::fun()"<<endl;
cout<<"b="<<b<<endl;
}
B(int tmp=2)//:A(tmp)
{
b = tmp;cout<<"调用B构造函数"<<endl;
}
};int main()
{
B* b=new B();
A *tmpa;
tmpa = b;
tmpa->fun();
//delete a;
delete b;
return 0;
}编译后运行结果:[student@SEP4020 testc++]$ ./xxx
调用A构造函数
调用B构造函数
调用B::fun()
b=2 但是如果把类A中的virtual关键字去掉的运行结果:[student@SEP4020 testc++]$ ./xxx
调用A构造函数
调用B构造函数
调用A::fun()
a=111由此可知,将派生类对象地址赋值给一个基类指针,由虚函数可实现C++的运行时多态性,尽管调用形式会一样,但是却调用的不同对象中的虚函数
相关文章推荐
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++中动态类型与动态绑定、虚函数、运行时多态的实现
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++中的动态类型与动态绑定、虚函数、运行时多态的实现
- C++多态,虚函数作用及底层实现原理
- C++对象布局及多态实现探索之虚函数调用
- C++对象布局及多态实现之带虚函数的类
- C++ 虚函数 多态的实现
- C++实现矩阵链乘法利用动态规划及运行实例结果
- C++中 虚函数及包含多态的实现
- C++中为什么要用虚函数、指针或引用才能实现多态?
- C++实现矩阵链乘法利用动态规划及运行实例结果
- c++类型兼容规则与虚函数实现多态的实现原理和区别
- C++ 第十一章 11.1 多态,虚函数实现多态
- c++中的重载操作符和虚函数实现多态
- C++实现矩阵链乘法利用动态规划及运行实例结果
- C++通过虚函数实现多态
- C++中为什么要用虚函数、指针或引用才能实现多态?