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*);

它需要一个指向常量chars 的指针,它被解释为“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 ++对象默认变量[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中未初始化变量/对象的默认值

在java中,如果没有给变量指定是公有或是私有,默认是啥?

在c语言中给变量赋初值有啥作用

ES6之主要知识点 变量的解构赋值。默认值

系统环境变量path默认值是多少,还有运行eclipse的问题

Spring Bean 作用域和生命周期