将临时对象分配给调用对象
Assigning temporary object to the invoking object
我正在做一本书的练习。我有一个类(名为 Golf),其中一个函数应该将一些数据传递给构造函数以创建一个临时对象,并将临时对象分配给调用对象,即 *this。这是代码:
Golf::Golf(const std::string name, int hc)
{
fullname = name;
handicap = hc;
}
int Golf::setgolf()
{
std::string name;
std::cout << "Enter the name: ";
std::getline(std::cin, name);
std::cin.clear();
std::cin.sync();
if (name == "")
return 0;
else
{
int handicap;
std::cout << "Enter the handicap: ";
std::cin >> handicap;
*this = Golf(fullname, handicap); //this line doesn't set the values
return 1;
}
}
但它不起作用。我在互联网上没有找到任何解决方案。我应该怎么做?
*this = Golf(fullname, handicap);
这将从当前对象的fullname
字段中初始化临时对象的fullname
,而不是从刚刚从输入中读取的名称。您可能希望:
*this = Golf(name, handicap);
或者,您可以重命名局部变量以隐藏成员,尽管有些人不赞成这种事情。
*this
成为作业的可行目的地有几个先决条件:
- 成员函数不能
const
。 - 不会删除分配操作(
... operator=(Golf ...)
适当调整...
节奏)。 - 生成的赋值或显式定义的赋值都执行正确的操作。
默认赋值运算符通常是可以的:它执行成员赋值。您可能需要自己的版本,例如,如果您需要维护资源(即,当您还有复制构造函数和析构函数时)。赋值运算符的另一个原因是需要使赋值具有很强的异常安全性,但其中一个成员赋值可能会抛出异常,例如,如果它是std::string
或std::vector<T>
。
也许,创建对象本身是众所周知的单调方式,但使用了静态方法:
class Golf{
private:
Golf *p;
Golf(){}
public:
static Golf* instance(){
if(p == NULL)
p = new Golf();
return p;
}
}
Golf::p = NULL;
在第一次调用 Golf::instance() 时,您创建新对象,接下来的调用仅返回指向现有对象的指针。
相关文章:
- 是什么让放置新调用对象的构造函数?
- 当我调用对象的方法时,对象的成员会发生变化
- 为什么静态数组成员变量在调用对象的实例后不显示任何内容?
- 这个C++编译器优化(在自身的实例上调用对象自己的构造函数)的名称是什么,它是如何工作的?
- 如何从构造函数副本 T(const T&)调用对象 T?
- C++17 如何保存泛型可调用对象以供以后使用
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 是否可以在编译时初始化对象的 C 样式函数指针,以便它调用对象的成员函数?
- 如何在C++中将可调用对象放入地图中?
- 在销毁期间从另一个线程调用对象上调用方法是否未定义行为?
- 广义 std::function (std::any 表示可调用对象)
- c++ 替换调用对象方法的宏函数
- 将可调用对象传递给采用 std::function 的构造函数
- 双指针在使用 new 时不调用对象构造函数
- 可调用对象作为默认模板参数
- 只需调用对象即可获取对象数据
- 如果用户尝试从 JS 调用对象的未定义函数C++则回调C++代码
- 如何将当前替代类型的 std::variant 传递给可调用对象?
- C++对象本身作为参数调用对象的方法
- 从移交的类调用对象