`

C++ 父类的非虚函数调用虚函数

    博客分类:
  • C++
c++ 
阅读更多
结论为:仍然是调用的虚函数,也就是说,如果是子类的指针调用该非虚函数,该非虚函数调用的仍为子类的虚函数。。。
好绕的一段话有木有……还是直接看运行结果和代码:



#include <iostream>
class A {
public:
	///虚函数
	virtual void  printClassInfo() {
		std::cout << "from class A:指针类型" << typeid (*this).name() << std::endl;
	}

	
	void printEncapulate() {
		
		printClassInfo();
	}

	void printEncapulateForceA() {
		
		A::printClassInfo();
	}

};

class B : public A {
public:
	virtual void  printClassInfo() {
		std::cout << "from class B:指针类型" << typeid (*this).name() << std::endl;
	}
};



void main() {
	B b;
	std::cout << "从非虚函数调用虚函数;\t\t\t\t"; b.printEncapulate();// 还是调用的子类虚函数啊!
	std::cout << "从非虚函数强制调用父类的虚函数;\t\t\t"; b.printEncapulateForceA();//强制调用父类虚函数,但类型信息没有丢失
	A* pB = &b;
	std::cout << "子类指针转为父类指针后;\t从非虚函数调用虚函数;\t";  pB->printEncapulate();//指针转为父类不会丢失类型信息

	A a = b;
	std::cout << "子类赋值给父类后;\t从非虚函数调用虚函数;\t"; a.printEncapulate();//赋值给父类变量,子类信息丢失

	A& aa = b;
	std::cout << "子类转为父类引用;\t从非虚函数调用虚函数;\t";  pB->printEncapulate();//指针转为父类引用,其实和指针等效,不会丢失类型信息
}

  • 大小: 16.8 KB
分享到:
评论

相关推荐

    c++中子类对象不能调用父类中的虚函数

    c++里,指针和引用是很重要的概念,这个程序不仅对指针和引用做了说明、使用,而且对子类不能继承父类虚函数也做了说明。

    构造函数不能声明为虚函数的原因及分析

    1. 从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道...虚函数的作用在于通过父类的指针或者引用来调用它的时候能够变成调用子类的那个成员函数。而构造函数是在创建对象时自动调用的,不可能通

    C++虚函数表解析

    C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际 子类的成员函数。

    C++中的虚函数表图解

    C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。

    深入探讨C++父类子类中虚函数的应用

    构造函数不能是虚函数,因为在调用构造函数创建对象时,构造函数必须是确定的,所以构造函数不能是虚函数。析构函数可以是虚函数。1.父类Father.h: 代码如下:#pragma onceclass Father{public: Father(void); ...

    C++虚函数与多态性

    C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。而重载则是允许有多个同名的函数,而这些函数的参数列表不同,允许参数个数不同,...

    C++_虚函数表解析

    C++_虚函数表解析 C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这...

    C++ 虚函数表解析

    C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。...

    深入解析C++中的虚函数与多态

    1.C++中的虚函数C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是...

    c++语言中虚函数实现多态的原理详解

    多态是c++的特点之一,关于多态,简而言之就是 用父类的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数,这种方法呢,可以让父类的指针具有多种形态,也就是说不需要改动很多的代码就可以让父类这...

    (转)多重继承下的虚函数表

    这样,在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,VFTable就显得尤为重要了,它就像一个地图一样,指明了实际所应该调用的函数。在C++的标准中提到,...

    虚函数表工作原理

    这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。

    深入剖析C++虚函数表

    这样,在有虚函数的类的实例中这个表被分配在了 这个实例的内存中,所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。

    C语言和C++的重要知识点提炼.rar

    1.c++虚函数原理 作用:C++中的虚函数的作用主要是实现了多态的机制。当基类中的成员函数定义了虚函数,其子类可以重新改写该函数。也即是允许派生类调用父类的同名函数而实现不同的功能,也叫动态联编。在主函数...

    C++虚函数及虚函数表简析

    C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。...

    虚函数各方面相关应用说明

    C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。...

    C++虚函数表实例分析

    多态是C++面向对象程序设计的一个重要特性。以前看到虚函数觉得很神奇,为...当我们通过父类指针来操作一个子类的时候,调用虚函数,都是通过虚函数表+固定的偏移,这样运行期多态便实现了。 在深度《深度》这本书中

Global site tag (gtag.js) - Google Analytics