C++ 如何在C+中交换对象数组的两个不同对象+;?
我尝试写一个交换函数来交换C++中数组的2种不同类型的对象。我该怎么做?(我更喜欢用指针来解决这个问题) 我曾尝试使用模板类交换2个对象,因为对象的类型与其他对象不同,并且在数组中循环时,我不知道一个元素属于哪些对象 我有3个类(对象A、对象B和对象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:
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:啊,很有趣。我不确定编辑是否已经解决了这个问题。