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

时间:2016-02-10 01:43:21

标签: c++ class pointers swap

我有两个A和B类,它们都应该使用第三类P的两个指针。在A类中创建B类指针,并将两个指针作为参数传递(这是我不能解决的问题。 ; t知道究竟如何)。在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&#39的交换函数交换它们时,A中的指针没有任何反应,这是我想要改变的。虽然我不知道什么是正确的方式。

2 个答案:

答案 0 :(得分:1)

如果B还有一个指向A的指针并且是A的朋友,你可以这样做。你也可以在swapPointers()函数中交换A中的指针。

顺便说一下,你的交换实现是错误的。

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

答案 1 :(得分:1)

这不是一个非常好的设计,我想知道为什么这在你的程序中是必要的。在任何情况下,您都可以通过引用实现此目的,从而避免两个类之间的相互依赖(您可以轻松地重复使用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存储对指针的引用,因此交换引用实际上将交换被引用的指针的值。

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