c++ - 如何在 C++ 中交换对象数组的 2 个不同对象?
问题描述
我正在尝试编写一个交换函数来交换 C++ 中数组的 2 种不同类型的对象。我怎样才能做到这一点?(我更喜欢使用指针来解决这个问题)
我尝试使用模板类来交换 2 个对象,因为对象的类型与其他对象不同,并且在遍历数组时,我不知道一个元素属于哪些对象。
我有 3 个类(Object_A、Object_B 和 Object_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;
}
我有一个 base_class 类型的数组来存储上面三个对象(Object_A、Object_B 和 Object_C)的一些元素。但是,当我想使用 SwapValues() 函数将 Object_A 的一个元素交换为 Object_C 之一时,它不起作用!
非常感谢你的帮助。
解决方案
编辑:重新阅读您的问题,您的指针交换不起作用的原因是因为您没有将指针作为参考传递。如果你坚持调用函数SwapValues
,你可以这样实现:
class base_class {
// ...
friend void SwapValues(base_class*& a, base_class*& b) {
::std::swap(a,b);
}
};
请注意,SwapValues
它仍然是自由函数,而不是成员函数。
您应该始终使用::std::swap
它,因为它有时会提供有效的替代方案:
::std::swap(*a,*b);
如果要自定义交换的工作方式,还可以在类中实现成员函数。例如,您的成员可以有效地交换,因为它们要么是POD ,要么::std::string
具有恒定时间交换。
推荐阅读
- javascript - Vimeo App 允许最终用户通过 API 上传到所有者的帐户
- sql - 以下查询的时间戳转换
- javascript - Knex for posgres 使用默认模式创建与多个项目冲突的锁表
- simulation - 在 anylogic 中为 50% 的代理分配优先级
- asp.net-mvc - 使用 ASP.NET MVC 上的单选按钮和下拉列表搜索数据
- r - 无法通过 R 中的 emmeans 对比截距
- angular - 如何在路由器出口下方声明组件而不复制它?
- node.js - google drive api 上传成功返回id。但驱动器中不存在文件?
- r - 忽略未知的美学:ggplot中的文本
- python - 试图抓取 Lazada 产品页面