基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的?

问题描述

基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的?

基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的?

解决方案

调用的是基类的。可强制转换回来,才能调用子类的。这就是多态

解决方案二:

这就是动态绑定跟静态绑定的区别。
c++中,如果你是虚函数,那么就需要根据实际指针所指的类型来决定调用的方法。这就是多态概念。
如果不是虚函数,那么就是看指针定义的类型,根据类型来调用它的成员函数。

解决方案三:

看是什么方法, 如果是虚方法,那么就是派生类的,否则是基类的。

时间: 2024-11-02 12:56:10

基类指针指向子类对象,调用的成员函数和成员变量是基类的还是子类的?的相关文章

c++-“一个指针指向某对象,同时另一个指针指向另外对象的下一地址,两个指针可能相等”是怎么回事?

问题描述 "一个指针指向某对象,同时另一个指针指向另外对象的下一地址,两个指针可能相等"是怎么回事? <C++ Primer>第五版,中文版.p50. 需要注意的是,一个指针指向某对象,同时另一个指针指向另外对象的下一地址,此时也有可能出现这两个指针值相同的情况,即指针相等. 解决方案 另外对象和某对象正好相邻,另外对象的下一对象正好是某对象. 解决方案二: 用一个指向int的指针来存储一个对象的地址.当指针A指向一个对象H的时候对象指针创建时的一个小插曲 解决方案三: 两

heapfree-结构体中的指针指向申请的内存空间,delete结构体变量前必须要释放吗?

问题描述 结构体中的指针指向申请的内存空间,delete结构体变量前必须要释放吗? 593行是必须的吗?解释下要或不要的原因. 解决方案 肯定需要啊,delete结构体指针,默认只会释放在结构体中直接声明的变量,对于new或者malloc出来的指针需要手动释放,而在实际的开发中为了方便, 我们常常将对结构体中指针的释放放在结构体的析构函数的,当然 像你这种用户也是没有问题的. 解决方案二: 进程退出会被OS自动释放所有的进程相关的空间,但是这样不是很正确,因为从代码角度有内存泄漏,比如你的程序如

对象的初始化-用函数的返回值初始化一个类对象,这其中用了几次复制构造函数

问题描述 用函数的返回值初始化一个类对象,这其中用了几次复制构造函数 这是我自己写的一段代码#includeusing namespace std;class Example{int num;public:Example(int i){num=i;cout<<""This is construction with parameter.n"";}Example(){num=0;cout<<""This is construc

编程-为什么派生类的指针指向基类对象 还可以调用派生类的函数?

问题描述 为什么派生类的指针指向基类对象 还可以调用派生类的函数? 想不明白啊,高手帮帮忙吧 Derived1 * hh = static_cast(new Base); hh->derivedfunction(); // 这里竟然是可以的 为什么呢 hh指向的是一个基类对象啊?? 而且即使derivedfunction里面用到派生类的私有成员也是可以的, 这到底是为什么啊??? 解决方案 虽然语法上让你通过了,static_cast是强制类型转换,所以语法没办法阻止你错误的做法,但是实际运行结

静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数

1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #include<iostream> void go(int num) { } void go(char *str) { } //class //::在一个类中 class A { public: void go(int num) { } void go(char *str) { } }; void

初学者对于java继承、多态,子类对象的内存分配的一些问题,百度了好多,但感觉没有系统的,在此提问,希望前辈们传到授业解惑

问题描述 由于是初学者,所以有些表述可能有误,都只是自己的一些理解.我是纯初学者,看过两个星期的C++,之前也学过C.感觉看C++的时候,更容易去理解C++中的面向对象技术的实现,但看JAVA的时候,可能隔着一层虚拟机,有些实现很难理解.第一个问题:我了解到一个对象里面,隐含了一个引用this,可以用this来特别地引用本对象的成员或者函数,然后还有一个super关键字,书上说这个关键字不是一个引用,但怎么看都感觉这个super是一个指向本对象的父类类型的引用.我想问这个super到底是什么,如

详解C++中的this指针与常对象_C 语言

C++ this指针详解 this 是C++中的一个关键字,也是一个常量指针,指向当前对象(具体说是当前对象的首地址).通过 this,可以访问当前对象的成员变量和成员函数. 所谓当前对象,就是正在使用的对象,例如对于stu.say();,stu 就是当前对象,系统正在访问 stu 的成员函数 say(). 假设 this 指向 stu 对象,那么下面的语句中,this 就和 pStu 的值相同: Student stu; //通过Student类来创建对象 Student *pStu = &s

c++ 类的指针数组-如何使用类指针数组实现以下的代码??

问题描述 如何使用类指针数组实现以下的代码?? 编写一个游戏平台.功能描述: 程序启动后,显示游戏列表(至少有三个游戏) 游戏1 游戏2 游戏3 用户选择其中一个游戏后,进入该游戏.游戏结束后,回到游戏列表.游戏列表按照游戏访问量动态排序. 定义游戏1类.游戏2.游戏3类,公有继承自CGame.游戏类自行设计,必须提供void start()作为游戏入口. 上面的要求如何实现??? #include<iostream> #include<algorithm> using names

Javascript函数、构造函数、原型、类和对象

函数 函数是JavaScript中特殊的对象,对函数执行typeof运算会返回字符串"function",因为函数也是对象,他们可以拥有属性和方法. 静态方法 函数在JS中定义了类的名字,任何添加到函数的属性都是类字段和类方法(类比Java中类的static variable 和 static method),下面代码起到Java里面static method的效果: var foo = function(){}; foo.printLog = function(){ if (argu