C++ 如何在C+中交换对象数组的两个不同对象+;?

C++ 如何在C+中交换对象数组的两个不同对象+;?,c++,C++,我尝试写一个交换函数来交换C++中数组的2种不同类型的对象。我该怎么做?(我更喜欢用指针来解决这个问题) 我曾尝试使用模板类交换2个对象,因为对象的类型与其他对象不同,并且在数组中循环时,我不知道一个元素属于哪些对象 我有3个类(对象A、对象B和对象C),如下所示: class Object_A : public base_class { private: int workingTime; int relaxTime; float salary; public:

我尝试写一个交换函数来交换C++中数组的2种不同类型的对象。我该怎么做?(我更喜欢用指针来解决这个问题)

我曾尝试使用模板类交换2个对象,因为对象的类型与其他对象不同,并且在数组中循环时,我不知道一个元素属于哪些对象

我有3个类(对象A、对象B和对象C),如下所示:

class Object_A : public base_class 
{

private:
    int workingTime;
    int relaxTime;
    float salary;
public:
    Object_A();
    virtual ~Object_A();
    float Cal_Salary();

    int getWorkingTime() const;

    void setWorkingTime(int workingTime);

    int getRelaxTime() const;

    void setRelaxTime(int relaxTime);

    float getSalary() const;

    void setSalary(float salary);
};

class Object_B : public base_class 
{

private:
    float income;
public:
    Officer();
    virtual ~Officer();

    float getIncome() const;

    void setIncome(float income);
};

class Object_C : public base_class 
{

private:
    std::string role;
    float roleCoef;
    float bonus;

public:
    Manager();
    virtual ~Manager();
    float Cal_Bonus();

    const std::string& getRole() const;

    void setRole(const std::string& role);

    float getRoleCoef() const;

    void setRoleCoef(float roleCoef);

    float getBonus() const;

    void setBonus(float bonus);
};

// I tried to write SwapValues func
template<class T, class U>
void SwapValues(T* a, U* b)
{
    T temp = a;
    a = b;
    b = temp;
}
class对象\u A:公共基类
{
私人:
工作时间;
int-relaxTime;
浮动工资;
公众:
对象_A();
虚拟~Object_A();
浮动工资();
int getWorkingTime()常量;
无效设置工作时间(int工作时间);
int getRelaxTime()常量;
void setRelaxTime(int relaxTime);
float getSalary()常量;
无效固定工资(浮动工资);
};
类对象:公共基类
{
私人:
浮动收益;
公众:
官员();
虚拟军官();
float getIncome()常量;
无效收入(浮动收入);
};
类对象C:公共基类
{
私人:
std::字符串角色;
浮球;
浮动奖金;
公众:
经理();
虚拟管理器();
浮动奖金();
常量std::string&getRole()常量;
void setRole(const std::string和role);
float getRoleCoef()常量;
void setRoleCoef(float roleCoef);
float getBonus()常量;
无效挫折(浮动奖金);
};
//我试着写swapvalue函数
模板
无效交换值(T*a,U*b)
{
温度T=a;
a=b;
b=温度;
}
我有一个基类类型的数组来存储上面三个对象(对象A、对象B和对象C)的一些元素。 但是,当我想用SwapValues()func将Object_A的一个元素替换为Object_C的一个元素时,它就不起作用了


非常感谢你的帮助。

我想你应该试试

void SwapValues(T* a, U* b)
{
    T* temp = a;
    a = b;
    b = temp;
}

编辑:重新阅读您的问题,您的指针Swap不起作用的原因是您没有将指针作为参考传递。如果您坚持调用函数
SwapValues
,您可以这样实现它:

class base_class {
  // ...

  friend void SwapValues(base_class*& a, base_class*& b) {
    ::std::swap(a,b);
  }
};
请注意,
SwapValues
仍然是自由函数,而不是成员函数


您应始终使用,因为它有时提供有效的替代方案:

::std::swap(*a,*b);

如果您想自定义交换的工作方式,还可以在类中实现成员函数。例如,您的成员可以有效地交换,因为它们是或:
:std::string
,具有固定时间交换。

由于数组由指针(
基类*
元素)组成,因此您不需要自己的交换函数。您可以正常地分配这样的指针,因此您可以只使用
std::swap

**template
?!“它不工作!”不是一个简明的问题描述。根据她的请求发布a,包括所有输入、输出和逐字错误消息。@oblivion OP可能想突出显示代码。您还需要提供一些您使用的类:为什么不编写交换函数来处理基类?注意两步。@Deduplicator:再来一次?C++20将介绍,但在此之前,使用限定名称调用
swap()
会抑制自定义实现。使用std::swap的两步
;互换(*a,*b)或替代的
std::iter_交换(a,b)是到那时为止的道路。诚然,对于指针来说,这并没有什么坏处。@Deduplicator:啊,很有趣。我不确定编辑是否已经解决了这个问题。