【问题标题】:C++ Object Default Variable [closed]C ++对象默认变量[关闭]
【发布时间】: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++ 教科书?
  • 欢迎来到stackoverflow!不太清楚你在问什么。您能否发布一些您无法理解的特定代码,并提出具体问题?
  • 是的,Dean Seo,这正是我要问的。
  • 值得注意的是,函数是按按类存储在程序中的,而不是按对象存储的。每个string 具有与任何其他string 完全相同的成员函数,并且编译器很清楚这一点,因此不会将这些信息存储在每个string 对象中,而是简单地通过类型引用正确的函数推理(暂时忽略 virtual 函数)。

标签: c++ string class oop object


【解决方案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!
猜你喜欢
  • 1970-01-01
  • 2013-11-15
  • 2018-08-03
  • 1970-01-01
  • 2021-09-19
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多