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;
}