将指向派生类的指针作为基类的参数传递
Pass a pointer to derived class as parameter of Base class
#include <iostream>
using namespace std;
class Base1
{
public:
virtual int virt1() { return 100; }
int data1;
};
class Derived : public Base1
{
public:
virtual int virt1() { return 150; }
int derivedData;
};
int Global1( Base1 * b1 )
{
return b1->virt1();
}
main()
{
Derived * d = new Derived;
cout << Global1(d);
}
我有这个代码片段,我的问题是,当我们将指针 d 传递给函数 Global1 时,我们传递给函数的指针的类是什么,它是派生的还是 base1?如果它是一个 base1 类,为什么它会打印 150。
你在这里展示的是虚函数的全部意义。 当您将基类中的函数声明为 virtual 时,您是在说编译器应该将绑定函数调用推迟到运行时。
如果您没有将 virt1() 声明为虚拟,编译器将查看您作为 Base1 实例传递的对象,并在该类上调用 virt1(),返回 100。
使用虚拟函数,编译器会等到运行时才能查看实际类型。 具有虚拟方法的类在对象中嵌入了一个指针,该指针指向要调用的虚拟函数表。 在运行时,您的应用程序提取正确版本的 vert1() 并调用它,因此在这种情况下它将返回 150。
相关文章:
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 如何将子类作为函数的参数传递给期望基类,然后将该对象传递到指向这些抽象类对象的指针向量中?
- C++ 如何使派生类自动获取基类参数
- 将派生类作为参数传递给方法,该方法是具有智能指针的基类
- 如何在 C++ 中将参数传递给基类构造函数
- 如何将基类方法超载作为参数传递到C 中的模板类
- 当派生类无法轻易将参数传递到基类时,如何调用基类构造函数
- 将函数上调整到基类参数的另一个
- 通过C 中的构造函数将地址参数传递给基类指针
- 将模板参数传递给基类,简洁的表示法
- 如何将模板函数作为模板类参数传递
- 将类传递到基类构造函数的模板参数中?
- 将派生类对象传递给具有 C++ 中基类参数的函数时,为什么要传递引用而不是值?
- 如何使用派生类中的虚拟函数,该函数在另一个具有基类参数的类中声明
- 当基类指针传递参数时,检查孩子的类型
- 为什么我无法访问作为参数传递到函数中的基类的受保护成员变量?
- 将基类 2 参数构造函数调用到子类 1 参数构造函数中
- 指向友元函数中基类参数类型的指针
- 按值传递共享指针并接受作为基类参数是如何工作的
- 为带有基类参数的派生类参数调用函数重载