c++ - 使用一个函数交换两个不同类中的指针

标签 c++ class pointers swap

我有两个类 A 和 B,它们都应该使用第三个类 P 的两个指针。类 B 的指针是在类 A 中创建的,并且这两个指针作为参数传递(这是我没有的问题知 Prop 体怎么做)。 B 内部还有一个 swap() 函数,它也应该交换 A 中的指针。 我不知道如何将 A 的指针传递给 B 以便在两个类 (A,B) 中交换它们。 它们必须在全局范围内定义吗?或者是否可以传递地址并交换这些地址?

Class B:
{
public:
    B(P *p1, P *p2) 
    {
        mB_p1 = p1;
        mB_p2 = p2;
    };

private:
    P *mB_p1;
    P *mB_p2;

    void swapPointers();
}


Class A:
{
public:
    A() 
    {
        mA_p1 = new P();
        mA_p2 = new P();
        a = new B(mA_p1, mA_p2); 
    };

    B *b;

private:
    P *mA_p1;
    P *mA_p2;
}


B::swapPointers() 
{
    P *temp;
    temp = mB_p1;
    mB_p1 = mB_p2;
    mB_p2 = mB_p1;
}

据我所知,我现在有两个类,每个类都有两个指针。当我使用 B 的交换函数交换它们时,A 中的指针没有任何变化,这正是我想要更改的。虽然我不知道什么是正确的方法。

最佳答案

这不是一个很好的设计,我确实想知道为什么这在您的程序中是必需的。在任何情况下,您都可以通过引用来实现这一点,从而避免两个类之间的相互依赖(,您可以轻松地重新使用 B 中创建可怕的错误你程序的其他部分也是如此):

class B
{
public:
    B( P * &p1, P * &p2 ) 
        : mB_p1( p1 )
        , mB_p2( p2 )
    {
    }

private:
    P * &mB_p1;
    P * &mB_p2;

    void swapPointers()
    {
        std::swap( mB_p1, mB_p2 );
    }
}

现在,B 存储对指针的引用,因此交换引用实际上会交换所引用指针的值。

顺便说一下,不要忘记在A 的析构函数中delete b;

关于c++ - 使用一个函数交换两个不同类中的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35305472/

相关文章:

c++ - C++ IPC通讯

python - 使用父类定义的方法时出错

java - 设计: Use class or instance references?

c - C中变量的逻辑内存地址

C 结构体和指针

c++ - 在引用 (T&) 和常量指针 (T* const) 之间进行选择

c++ - 如何使用 curl 请求发送数据

c++ - C++11 STL 中的所有内容都是用户可实现的吗?

c++ - 从成员 get 方法返回 const 引用

c++ - C/C++ 中的两个 'main' 函数