a test program for polymophism in c++
2006-11-02 21:51
375 查看
[align=left]#include<iostream>[/align]
[align=left]using namespace std;[/align]
[align=left] [/align]
[align=left]class B[/align]
[align=left]{[/align]
[align=left]public:[/align]
[align=left] virtual void f1() const[/align]
[align=left] {[/align]
[align=left] cout<<"B::f1"<<endl;[/align]
[align=left] }[/align]
[align=left] virtual void f2() const[/align]
[align=left] {[/align]
[align=left] cout<<"B::f2"<<endl;[/align]
[align=left] }[/align]
[align=left]};[/align]
[align=left]class D: public B[/align]
[align=left]{[/align]
[align=left]public:[/align]
[align=left] void f1() const[/align]
[align=left] {[/align]
[align=left] cout<<"D::f1"<<endl;[/align]
[align=left] }[/align]
[align=left] virtual void f3() const[/align]
[align=left] {[/align]
[align=left] cout<<"D::f3"<<endl;[/align]
[align=left] }[/align]
[align=left]};[/align]
[align=left] [/align]
[align=left]void main()[/align]
[align=left]{[/align]
[align=left] D d;[/align]
[align=left] [/align]
[align=left] //pointer and reference both can achieve polymophism[/align]
[align=left] B& rb=d;[/align]
[align=left] rb.f1(); //output: D::f1[/align]
[align=left] rb.B::f1(); //output: B::f1[/align]
[align=left] [/align]
[align=left] B* pb = &d;[/align]
[align=left] pb->f1(); //output: D::f1[/align]
[align=left] pb->B::f1(); //output: B::f1[/align]
[align=left] [/align]
[align=left] char ch;//pause[/align]
[align=left] cin>>ch;[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]Output:[/align]
[align=left][/align]
[align=left] [/align]
If D::f1 changed to
[align=left] void f1() [/align]
[align=left] {[/align]
[align=left] cout<<"D::f1"<<endl;[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]That is delete the const, then the result is:[/align]
[align=left][/align]
[align=left][/align]
[align=left]This is because Constness is a part of function signature.[/align]
[align=left]using namespace std;[/align]
[align=left] [/align]
[align=left]class B[/align]
[align=left]{[/align]
[align=left]public:[/align]
[align=left] virtual void f1() const[/align]
[align=left] {[/align]
[align=left] cout<<"B::f1"<<endl;[/align]
[align=left] }[/align]
[align=left] virtual void f2() const[/align]
[align=left] {[/align]
[align=left] cout<<"B::f2"<<endl;[/align]
[align=left] }[/align]
[align=left]};[/align]
[align=left]class D: public B[/align]
[align=left]{[/align]
[align=left]public:[/align]
[align=left] void f1() const[/align]
[align=left] {[/align]
[align=left] cout<<"D::f1"<<endl;[/align]
[align=left] }[/align]
[align=left] virtual void f3() const[/align]
[align=left] {[/align]
[align=left] cout<<"D::f3"<<endl;[/align]
[align=left] }[/align]
[align=left]};[/align]
[align=left] [/align]
[align=left]void main()[/align]
[align=left]{[/align]
[align=left] D d;[/align]
[align=left] [/align]
[align=left] //pointer and reference both can achieve polymophism[/align]
[align=left] B& rb=d;[/align]
[align=left] rb.f1(); //output: D::f1[/align]
[align=left] rb.B::f1(); //output: B::f1[/align]
[align=left] [/align]
[align=left] B* pb = &d;[/align]
[align=left] pb->f1(); //output: D::f1[/align]
[align=left] pb->B::f1(); //output: B::f1[/align]
[align=left] [/align]
[align=left] char ch;//pause[/align]
[align=left] cin>>ch;[/align]
[align=left]}[/align]
[align=left][/align]
[align=left]Output:[/align]
[align=left][/align]
[align=left] [/align]
If D::f1 changed to
[align=left] void f1() [/align]
[align=left] {[/align]
[align=left] cout<<"D::f1"<<endl;[/align]
[align=left] }[/align]
[align=left][/align]
[align=left]That is delete the const, then the result is:[/align]
[align=left][/align]
[align=left][/align]
[align=left]This is because Constness is a part of function signature.[/align]
相关文章推荐
- Program for Android in C/C++ with the Native Development Kit (if you dare)
- MSDN文档翻译 Learn to Program for Windows in C++ 003 序章第一节
- [RT]Learn to Program for Windows in C++
- MSDN文档翻译 Learn to Program for Windows in C++ 004 序章第二节
- MSDN文档翻译 Learn to Program for Windows in C++ 005 序章第三节
- MSDN文档翻译 Learn to Program for Windows in C++ 001 前言
- MSDN文档翻译 Learn to Program for Windows in C++ 002 序章前言
- Simple "virus" like program in C++
- A for loop javascript event dynamically binding with customized data as paramete passed in test
- C++ AMP: Changes in VS 11 Beta for C++ AMP
- Post Build Event for CxxTest in Visual Studio 2005
- Special cases in C++ program
- Compile C/C++ In Eclipse for Android
- C++ STL erase in for loop
- Classes for Writing HTTP Clients in C++ - CodeProject
- Programming Windows TCP Sockets in C++ for the Beginner
- Secure Coding Best Practices for Memory Allocation in C and C++
- How to check for NAN / INF / IND in C++
- 1022(P116—126) for thinking in c++
- How to separate the implementation and definition for template function in c++