c++中指向对象及其后代的指针
pointers to object and descendants in C++
我正在做一个简单的c++(在Linux下)项目,它将有指向对象的指针。我有类A,类B扩展了A,类C扩展了B。类C有一个方法(test),在A和B中都不存在。
是否可能有一个单一的指针'p',可以指向a, B和C类型的对象?我怎么定义那个指针呢?
其次,由于a.test()不存在,但c.test()存在,我的泛型指针'p'可以调用p->test()吗?这能编译吗?如果在运行时p指向类A的对象并且我调用p->test()怎么办?这是运行时错误吗?可以有一个指针指向的对象A、B和C类型?
我想你的意思是"可以指向A对象或B对象或C对象",对吗?
是的,你可以有这样一个指针。
如何定义指针?
A*
基类指针可以指向派生类的对象。
其次,如果指针可以调用对象的方法,我该如何调用呢指向A/B/C类?
在A
中定义virtual
函数,并在B
和C
中覆盖它。然后,当你通过A*
调用方法时,语言将执行动态调度,即它将根据你的A*
指向A
、B
还是C
自动调用正确的方法。
我需要在调用方法之前强制转换它们吗?
。这将大大违背虚函数的目的。
下面是一个完整的例子:
#include <iostream>
class A
{
public:
virtual ~A() {} // not really needed in this program,
// but almost always needed in real code
// when a class has a virtual function
virtual void method() { std::cout << "A::methodn"; }
};
class B : public A
{
public:
virtual void method() override { std::cout << "B::methodn"; }
};
class C : public A
{
public:
virtual void method() override { std::cout << "C::methodn"; }
};
int main()
{
A a;
B b;
C c;
A* ptr = &a;
ptr->method();
ptr = &b;
ptr->method();
ptr = &c;
ptr->method();
}
输出:A::method
B::method
C::method
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 将OpenCV C++重写为EmguCV C#-如何使用指针
- c++中指向对象及其后代的指针