c++ - 通过引用传递父对象

标签 c++ oop inheritance pass-by-reference

我在库中有这段代码:

class Parent
{
    //some data and functions
};

void myfunc(Parent& ref);

我想在我的应用程序中执行此代码:

class Child : public Parent
{
   // some other data and functions
   void dostuff()
   {
       myfunc(*this);
   }
};

通过 *this 是否安全? (没有切片,没有复制,......) 像这样调用 myfunc 更好吗:

myfunc( * ((Parent*)this) )

请注意,我无法控制 myfunc 内部发生的事情,在某些情况下,我什至不知道里面发生了什么。

我多次使用过指针传递,我已经习惯了,但之前从未使用过传递父引用。

最佳答案

myfunc(*this) 没问题,只要 myfunc 被声明为接受引用——它就是。

这不会复制对象。它将传递对原始对象的引用。此外,它不会对对象进行切片。引用将是 Base& 类型,但它所引用的对象将保持不变。

你知道,如果你在这个 Base& 上调用多态(例如,virtual)方法,多态仍然可以正常工作并做你想做的事期望——就像你通过指针调用一样。换句话说:

Base& b = *derived;
b.SomeVirtualFoo();

...将具有相同的效果:

Base* b = derived;
b->SomeVirtualFoo();

关于c++ - 通过引用传递父对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8248191/

相关文章:

C++ 如何使用类和函数将我的代码转换为 OOP?

java - Java中的@Inherited注解

c# - 为什么一个空类会作为几个泛型类的基类?

c++ - 读取 CRC32 文件

c++ - 如何遍历类指针的 vector

c++ - VS2008中一个奇怪的双重计算

c++ - *迭代器导致段错误

c++ - 如何将箭头符号写入文件然后读回?

java - Java 中的文件 I/O

javascript - 如何从类构造函数中的参数继承方法