使用一个函数在两个不同的类中交换指针
Swap pointers in two different classes using one function
我有两个类 A 和 B 都应该使用第三个类 P 的两个指针。在类 A 中创建类 B 的指针,并将两个指针作为参数传递(这是我不知道具体如何的问题)。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
存储对指针的引用,因此交换引用实际上会交换所引用指针的值。
顺便说一句,不要忘记delete b;
析构函数以进行A
.
如果 B 也有指向 A 的指针并且是 A 的朋友,则可以执行此操作。您还可以在 swapPointers()
函数中交换 A 中的指针。
顺便说一下,你的交换实现是错误的。
B::swapPointers()
{
P* temp = mB_p1;
mB_p1 = mB_p2;
mB_p2 = temp;
}
相关文章:
- 共享指针的复制和交换效率
- 如何在单个链表中交换两个节点的位置,只修改指针
- 以原子方式交换指针与 nullptr
- 使用指针交换整数
- 使用指针 c++ 交换结构数组中的元素
- 使用指针交换数组的内容
- 无法使用指针写入交换
- 使用指针交换而不引用数组C++
- 共享指针交换方法标识更改
- 为什么基于指针交换两个值在函数范围之外不起作用?
- 将指针交换为指针
- 使用双向链表中的指针交换节点
- 使用指针交换字符变量
- 通过 xor 运算符使用引用或指针交换两个变量的值
- 指针交换怪异
- 当数组是类的数据成员时,如何使用指针交换数组
- 使用公用指针交换指向已分配内存的指针
- 使用指针交换两个字符串会输出奇怪的输出
- 仅通过操作指针交换链表中的相邻节点
- 使用指针交换两个变量