指向对象的指针的函数调用问题(含虚函数和纯虚函数知识)
来源:互联网 发布:c语言函数的教学设计 编辑:程序博客网 时间:2024/05/10 07:22
首先是没有涉及虚函数的情况:
对象指针不能指向父类对象
执行同样的函数talk,选择执行指针所指定的talk例如B *pb,则pb只能指向B或者子类对象,执行相同函数时只执行B的talk
</pre></p><p><pre name="code" class="cpp">#include<iostream>#include<cmath>using namespace std;class A{public:void talk(){cout<<"This is A"<<endl;}};class B:public A{public:void talk(){cout<<"This is B"<<endl;}};class C:public B{public:void talk(){cout<<"This is C"<<endl;}};class D:public C{public:void talk(){cout<<"This is D"<<endl;}};int main(){A a;B b;C c;D d;B *pb;//pb=&a; (Error!!) //pb->talk();pb=&b; //执行B的talkpb->talk();pb=&c; //依旧执行B的talkpb->talk();pb=&d; //依旧执行B的talkpb->talk();a.talk(); //这里只调用他们自己的b.talk();c.talk();d.talk(); //对象指针不能指向父类对象//执行同样的函数talk,选择执行指针所指定的talk//例如B *pb,则pb只能指向B或者子类对象,执行相同函数时只执行B的talk}
然后是涉及虚函数的情况,如果父类中的那个talk是虚函数,则选择调用当前指向的类对象
#include<iostream>using namespace std;class A{public:void talk(){cout<<"This is A"<<endl;}};class B:public A{public:virtual void talk() //虚函数talk{cout<<"This is B"<<endl;}};class C:public B //C继承B{public: void talk(){cout<<"This is C"<<endl;}};class D:public B //D继承B{public:void talk(){cout<<"This is D"<<endl;}};class E:public D //E继承D,相当于继承B{public:void talk(){cout<<"This is E"<<endl;}};int main(){A a;B b;C c;D d;E e;B *pb;//pb=&a; (Error!!) //依旧不能指向父类//pb->talk();pb=&b; //执行B的talkpb->talk();pb=&c; //执行C的talkpb->talk();pb=&d; //执行D的talkpb->talk();pb=&e; //执行D的talkpb->talk();}
纯虚函数:定义的时候,不写纯虚函数的实现, 同时这个类被称作抽象类,不能被实例化
virtual void talk()=0;
继承抽象类的派生类,必须对纯虚函数进行实现,否则会报错(如果没加纯虚,则可以不实现的)
#include<iostream>using namespace std;class A{public:void talk();};class B:public A{public:virtual void talk()=0; //纯虚函数talk};class C:public B //C继承B{public: void talk(){cout<<"This is C"<<endl;}};class D:public B //D继承B{public:void talk(){cout<<"This is D"<<endl;}};class E:public D //E继承D,相当于继承B{public:void talk(){cout<<"This is E"<<endl;}};int main(){A a;//B b; (Error!)抽象类不可实例化,指针也不行C c;D d;E e;c.talk();d.talk();e.talk();}
0 0
- 指向对象的指针的函数调用问题(含虚函数和纯虚函数知识)
- 指向函数的指针(函数指针)和指针函数
- 关于基类指针指向子类对象,构造函数和析构函数调用的顺序的问题。
- 纯虚函数的调用
- 纯虚函数的调用
- 指向子类对象的基类指针调用非虚函数都是基类的函数吗
- C 指针指向调用函数内部的零时变量问题
- 指向函数的指针问题(一般函数和类函数)
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- 指向函数的指针
- log中打印e异常信息的堆栈
- 基于hadoop生态圈的数据仓库实践 —— OLAP与数据可视化(六)
- postgreSQL 命令行常用操作命令
- Java中集合框架
- 学习MyBatis.Net 之路(一)
- 指向对象的指针的函数调用问题(含虚函数和纯虚函数知识)
- shell脚本:拷贝android源码下所有的Android.mk到特定目录
- jmp、call、ret、retf解析
- 详解iOS 静态库 [转] ----- 个人觉得最详细的入门级
- 网站数据统计分析之一:日志收集原理及其实现
- Java中增加了@Override方法报错
- INSERT INTO .. ON DUPLICATE KEY更新多行记录
- C与C++变量的初始化
- [Android]Android的常用adb命令