如何将int值传递给成员函数运算符+ =以将int值插入c ++中的对象列表中?

如何解决如何将int值传递给成员函数运算符+ =以将int值插入c ++中的对象列表中?

我对C ++还是很陌生,在执行看似简单的任务时遇到了问题。给了我一个main函数进行测试,并且我必须创建一个与int main正确对应的类。以下是我到目前为止所做的课程。除了我提供的内容以外,还有很多其他功能,因为我在上课的基本部分时遇到了问题。

任务是创建一个类,该类列出int的对象列表,并且可以用以后提供的其他函数来操作。现在,我正在尝试设置列表并插入int n值。

#include<iostream>
#include<string>
#include<cmath>
#define DEFAULT 8
#define EMPTY -1
using namespace std;
// Your class specification goes here <<<<<<<<<<<<<<
class Myclass
{
  private:
   int *a = NULL;
   int end = EMPTY; 
   int size;
  public:
    Myclass(){} //default constructor
    Myclass(Myclass const &other);//copy constructor
    Myclass(Myclass &&other);//move constructor
    ~Myclass() {delete [] a;} //destructor 
    Myclass& operator=(const Myclass& other); //copy assignment
    Myclass& operator=(Myclass&& other); //move assignment
    Myclass& operator+=(const Myclass &other);
    Myclass& operator+(Myclassconst &other); // overload +
    friend ostream& operator<<(ostream &os,const Myclass& other);
};

到目前为止,我班上的这是定义。

Myclass::Myclass(Myclass const &other) // copy constructor
{
  end = other.end;
  a = new int [DEFAULT];
  for (int i = 0; i <= end; i++)
   a[i] = other.a[i];
}
Myclass::Myclass(Myclass &&other) //move constructor
{
  a = new int [DEFAULT];
  for (int i = 0; i <= end; i++)
   a[i] = other.a[i];  
}
Myclass& Myclass::operator=(const Myclass& other) //overload =
{
  if (this == &other) // Check for self assignment
   return *this;
  end = other.end;
  delete [] a;
  a = new int [DEFAULT];
  for (int i = 0; i <= end; i++)
   a[i] = other.a[i];
  return *this;    
}
Myclass& Myclass::operator=(Myclass&& other)
{
  if(this != &other)
  {
    delete[] a;
    a = new int [DEFAULT];
    for (int i = 0; i <= end; i++)
    {
      a[i] = other.a[i];
    }
  }
  return *this;
}
Myclass& Myclass::operator+(Myclass const &other) //overload +
{
  Myclass answer;
  int index = 0;
  for (int i = 0; i < this->end; i++)
   answer.a[index++] = this->a[i];
  for (int i = 0; i <= other.end; i++)
   answer.a[index++] = other.a[i];
  return answer;  
}
Myclass& Myclass::operator+=(const Myclass&other)
 {
   Myclass answer;
  int index = 0;
  for (int i = 0; i < this->end; i++)
   answer.a[index++] = this->a[i];
   return answer;
 }

ostream& operator<<(ostream &os,const Myclass& other)
{
  for (int i = 0; i <= other.end; i++)
   os << other.a[i] << ",";
  return os;  
}

我的主要问题是让+ =运算符正常工作,因为我不断收到有关将Myclass和int一起添加的错误。我的+ =函数似乎也不正确,但是我不确定如何更正它。我已经注释掉了a2和a3,因为我不确定如何处理这些对象的是非。 请以任何方式提供帮助或向我发送有关我非常感激的信息。

解决方法

您的operator+=不接受int作为输入,仅接受另一个Alist,因此a1 += n;将不起作用。为此,您需要添加另一个operator+=

此外,在构造函数和赋值运算符中,数组管理是完全错误的。您的副本构造函数和副本分配运算符未分配足够的内存来复制整个other列表(如果整数多于DEFAULT)。而且您的move构造函数和move赋值运算符实际上根本不移动任何东西。

一般来说,所有运营商都存在其他问题。您的串联运算符未正确附加到数组。非复合运算符的返回类型错误。参见What are the basic rules and idioms for operator overloading?

尝试更多类似的方法:

Alist.h

#ifndef ALIST_H
#define ALIST_H

#include <iostream>

class Alist
{
private:
    int *a = nullptr;
    int size = 0;
    int capacity = 0;

public:
    Alist() = default; //default constructor
    Alist(int initialCap);
    Alist(Alist const &other); //copy constructor
    Alist(Alist &&other); //move constructor

    ~Alist(); //destructor

    void swap(Alist &other);

    Alist& operator=(Alist other); //copy+move assignment
    Alist& operator+=(const Alist &other);
    Alist& operator+=(int value);
    Alist operator+(const Alist &other) const; // overload +
    Alist operator+(int value) const;
    //int& operator[](int index);

    friend std::ostream& operator<<(std::ostream &os,const Alist& list);
};

void swap(Alist &a1,Alist &a2);

#endif

Alist.cpp

#include "Alist.h"
#include <utility>

#define GROWTH 8 // must be a power of 2!

Alist::Alist(int initialCap)
    : Alist()
{
    if (initialCap > 0) {
        capacity = (initialCap + (GROWTH-1)) & ~(GROWTH-1);
        a = new int [capacity];
    }
}

Alist::Alist(const Alist &other)
    : Alist(other.size)
{
    size = other.size;
    for (int i = 0; i < size; ++i) {
        a[i] = other.a[i];
    }
}

Alist::Alist(Alist &&other)
    : Alist()
{
    other.swap(*this);
}

Alist::~Alist()
{
    delete [] a;
}

void Alist::swap(Alist &other)
{
    std::swap(capacity,other.capacity);
    std::swap(size,other.size);
    std::swap(a,other.a);
}

Alist& Alist::operator=(Alist other)
{
    other.swap(*this);
    return *this;
}

Alist Alist::operator+(const Alist &other) const
{
    Alist answer(size + other.size);
    answer += *this;
    answer += other;
    return answer;
}

Alist Alist::operator+(int value) const
{
    Alist answer(size + 1);
    answer += *this;
    answer += value;
    return answer;
}

Alist& Alist::operator+=(const Alist &other)
{
    if ((size + other.size) > capacity)
    {
        Alist tmp(size + other.size);
        tmp += *this;
        tmp.swap(*this);
    }
    for (int i = 0; i < other.size; ++i) {
        a[size++] = other.a[i];
    }
    return *this;
}

Alist& Alist::operator+=(int value)
{
    if ((size + 1) > capacity)
    {
        Alist tmp(size + 1);
        tmp += *this;
        tmp.swap(*this);
    }
    a[size++] = value;
    return *this;
}

//int& Alist::operator[](int index)
//{
// return a[index];
//}

std::ostream& operator<<(std::ostream &os,const Alist& list)
{
    for (int i = 0; i < list.size; i++)
        os << list.a[i] << ",";
    return os;
}

void swap(Alist &a1,Alist &a2)
{
    a1.swap(a2);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-