gpt4 book ai didi

c++ - C++类中参数的作用域

转载 作者:行者123 更新时间:2023-11-30 03:33:35 25 4
gpt4 key购买 nike

我在 C++ 中有这个类,它基本上打印出“cat1”。以下是代码:

class Cat {
public:
Cat(const std::string h = "")
: name(h)
{
std::cout << "Cat " << name << " created." << std::endl;
}
void eatFood(){
std::cout << "Food eaten by cat named " << name << "." << std::endl;
}

std::string name="";
};

Cat makeCat2() {
return Cat("Cat2");
}

int main(int argc, char *argv[])
{
Cat kit = makeCat2();
kit.eatFood();
}

结果是

Cat Cat2 created
Food eaten by cat named Cat2

但是当不是从

更改 Cat 类的参数声明时
Cat(const std::string h = "")
: name(h)

Cat(const std::string name = "")

结果是

Cat Cat2 created
Food eaten by cat named

所以我的问题是,如果我们从 std::string h = ""更改为通过 std::string name= ""直接将参数分配给 name 那么为什么不存储或更新字符串变量 "name"即当成员函数 eatfood() 打印“name”时,没有打印出初始值。换句话说,在成员函数中更新参数 cat2 的唯一方法是使用使用 name(h) 的初始化方法?

最佳答案

这里有两个名为name的变量。

第一个是构造函数的参数,它仅在该构造函数的范围内(这与您在另一个示例中称为 h 的变量相同)。

第二个是成员变量。

如果您没有将第二个设置为与第一个相同的值,则该值永远不会存储在任何地方,并且会在构造函数结束时“丢失”。

关于c++ - C++类中参数的作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42750217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com