C ++对象默认变量[关闭]
Posted
技术标签:
【中文标题】C ++对象默认变量[关闭]【英文标题】:C++ Object Default Variable [closed] 【发布时间】:2018-10-15 23:34:48 【问题描述】:使用字符串对象时,可以将对象设置为字符串字面量。这怎么可能?该对象由多个函数和变量组成,那么如何将其设置为等于一个字符串文字?
谢谢!
编辑:
抱歉这个令人困惑的问题。
对我来说,可以将变量或数组设置为等于一个值。例如:
char word[3] = 'c', 'a', 'r';
但是字符串不仅仅是一个变量,那么在它的类中有什么可以让你写一个语句来设置对象的值呢?
string word = "car";
我很想在我的对象中这样做,但到目前为止,我一直在使用类似的东西,其中 objectTemp 是类,而 tempF 是保持华氏温度值的成员:
objectTemp cat;
cat.tempF = 102;
【问题讨论】:
这怎么可能?你问std::string str = "Hello"
怎么可能?
你在学习什么 C++ 教科书?
欢迎来到***!不太清楚你在问什么。您能否发布一些您无法理解的特定代码,并提出具体问题?
是的,Dean Seo,这正是我要问的。
值得注意的是,函数是按按类存储在程序中的,而不是按对象存储的。每个string
具有与任何其他string
完全相同的成员函数,并且编译器很清楚这一点,因此不会将这些信息存储在每个string
对象中,而是简单地通过类型引用正确的函数推理(暂时忽略 virtual
函数)。
【参考方案1】:
C++ 支持允许调用函数的运算符重载:
string& operator= (const char* s);
类std::string
。
这只需要一个const char*
(字面量)并在内部创建新的std::string
对象。
【讨论】:
所以...std::string foo = "bar";
调用了一个名为operator=()
的函数?
@Swordfish 不,它调用了 magic 构造函数重载。
@πάνταῥεῖ 哈!你说的! ;)
嗯。 “这只需要一个 const char*(文字)”我只能分配字符串文字吗?
不,它只是许多的实现。在此处查找更多信息:cplusplus.com/reference/string/string/operator=【参考方案2】:
这是可能的,因为 C++ 知道在对象实例化时调用的“魔术”函数,称为构造函数。
您应该查找的另一个“神奇”函数是赋值运算符。
但是字符串不仅仅是一个变量,那么在它的类中有什么可以让你写一个语句来设置对象的值呢?
string word = "car";
如前所述,std::string
的构造函数之一使这个奇迹发生:
std::string::string(char const*);
它需要一个指向常量char
s 的指针,它被解释为“C 字符串”(一个以零结尾的字符串)。
我很想在我的对象中这样做,但到目前为止,我一直在使用类似的东西,其中 objectTemp 是类,而 tempF 是保持华氏温度值的成员:
objectTemp cat; cat.tempF = 102;
为你的类编写一个构造函数(=不要害怕魔法),它接受一个数值作为它的参数。例如。
class objectTemp
int tempF;
public:
objectTemp(int tempF) // constructors are named the same as the struct/class
: tempF tempF // initializer-list
// an empty body
用法:
objectTemp cat = 102;
或:
objectTemp cat(102);
或:
objectTemp cat 102 ;
【讨论】:
C++ 中没有什么能比得上 magic。请停止传播此类神话。 @πάνταῥεῖ 每个人都知道 C++ 中有一种魔力,它使得用 C++ 编写的程序比用 C 编写的程序慢! "...这使得用 C++ 编写的程序比用 C 编写的程序慢!" 这只是另一个神话。如前所述,请不要再这样说了。 @πάνταῥεῖ 这是事实。您可能还会将异常处理的成本称为神话。 怎么会这样?因为他是 Kwisatz Haderach!以上是关于C ++对象默认变量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章