C++ 指针问题?这个问题?班级问题? #包括 使用名称空间std; 类项目 { 私人: 字符串名; 整数幂; 耐用性; 公众: 项目(字符串n,整数p,整数d); 无效描述()常量; ~Item(); }; Item::Item(字符串n,int p,int d) { 名称=n;功率=p;耐久性=d; }

C++ 指针问题?这个问题?班级问题? #包括 使用名称空间std; 类项目 { 私人: 字符串名; 整数幂; 耐用性; 公众: 项目(字符串n,整数p,整数d); 无效描述()常量; ~Item(); }; Item::Item(字符串n,int p,int d) { 名称=n;功率=p;耐久性=d; },c++,class,pointers,this,C++,Class,Pointers,This,我也无法显示此功能。。。我怎么称呼它 #include <iostream> using namespace std; class Item { private: string name; int power; int durability; public: Item(string n, int p, int d); void Describe() const; ~Item(); }; Item::Item(string n, int p, int d)

我也无法显示此功能。。。我怎么称呼它

#include <iostream>
using namespace std;

class Item
{
private:
   string name;
  int power;
  int durability;
public:
  Item(string n, int p, int d);
  void Describe() const;
  ~Item();
};

Item::Item(string n, int p, int d)
{
  name = n; power = p; durability = d;
}
void Item::descripe()常量
{
库特
我也很难显示这个函数…我怎么称呼它

#include <iostream>
using namespace std;

class Item
{
private:
   string name;
  int power;
  int durability;
public:
  Item(string n, int p, int d);
  void Describe() const;
  ~Item();
};

Item::Item(string n, int p, int d)
{
  name = n; power = p; durability = d;
}

首先检查空ptr。

类战士中,工具是指针-
项*工具
。因此,使用
*
获取对象


接下来,为了能够使用流打印类
Item
的对象,您应该重载
您可以使用
Item
对象而不是指向
Item
的指针来编写程序,并且不会出现您遇到的大多数问题

话虽如此,您的代码仍存在一些问题:

  • 在3参数
    Warrior
    构造函数中,您没有将
    tool
    初始化为
    NULL
    (最好是
    nullptr
  • 您没有将
    Warrior
    copy构造函数中的所有成员从传入对象复制到this
  • 您缺少
    Warrior
    的析构函数
  • 您缺少
    Warrior
    的赋值运算符(
    Warrior::operator=
  • 第一期:

    const std::string & Item::get_name() const
    {
      return name;
    }
    
    请注意成员初始化列表的用法

    第二期:

    Warrior::Warrior(string n, int l, string p) : 
                     name(n), level(l), profession(p), tool(nullptr) {}
    
    请注意,所有成员都是使用传入对象的成员初始化的

    第三期:

    Warrior::Warrior(const Warrior& otherObj) :  
    name(otherObj.name), level(otherObj.level), profession(otherObj.profession), tool(nullptr)
    {
      if (otherObj.tool)
         tool = new Item(*(otherObj.tool));
    }
    
    第四个问题:使用的赋值运算符应该如下所示:

    Warrior::~Warror() { delete tool; }
    
    #include。由于在
    Warrior
    中缺少赋值运算符和析构函数,因此未能执行此操作。未能遵守此规则将导致程序中出现未定义的行为
  • 在编写用户定义的复制构造函数时,您应该复制所有成员,而不仅仅是一个或两个成员。拥有对象的部分副本是最难诊断的错误之一。复制所有成员规则的一个主要例外是如果您的对象被引用计数
  • 构造对象时,应该将指针成员初始化为某种状态(通常为
    nullptr

  • 您的代码有几处错误。您的复制构造函数缺少复制所有成员的功能。在3参数构造函数中,您未能将
    工具
    初始化为NULL。您缺少
    战士
    的赋值运算符,可能还有更多错误。为什么还要涉及指针?只需拥有
    项即可l、 
    Warrior
    类中,删除错误的复制构造函数,使
    GiveTool
    执行一个简单的
    tool=Item(tool,无论什么)
    (没有
    新的
    )你的大部分问题都解决了。@PaulMcKenzie这是一个作业。我需要使用指针。这涉及到动态分配和deallocation@Ares许多人都使用C++课程,他们的作业使用的是对象而不是指针。所以,因为它是一个作业,并不意味着“使用指针”。对于在座的许多人来说。嘿,我真的很感谢你花时间纠正我的错误!我一定会回顾这篇文章来帮助我完成未来的任务…谢谢你善良的先生!!!
    
    Warrior::Warrior(string n, int l, string p) : 
                     name(n), level(l), profession(p), tool(nullptr) {}
    
    Warrior::Warrior(const Warrior& otherObj) :  
    name(otherObj.name), level(otherObj.level), profession(otherObj.profession), tool(nullptr)
    {
      if (otherObj.tool)
         tool = new Item(*(otherObj.tool));
    }
    
    Warrior::~Warror() { delete tool; }
    
    #include <algorithm>
    //...
    Warrior& Warrior::operator=(const Warrior& w)
    {
       Warrior temp(w);
       std::swap(temp.tool, tool);
       std::swap(temp.name, name);
       std::swap(temp.level, level);
       std::swap(temp.profession, profession);
       return *this;
    }