2

我只是想知道您是否可以向我解释带参数的函数是如何工作的。我一直在关注教程等,但它们似乎没有解释代码如何工作以获取输出。这是一个例子:

#include <iostream>

using std::endl;
using std::cout;
using std::cin;
using std::string;



class stan
{
public:
    void setName(string x)
    {
        name = x;
    }
    string getName()
    {
        return name;
    }

private:
string name;
};

int main()
{
stan con;
con.setName("Bruce Almighty");
cout << con.getName() << endl;
}

我不明白我们如何从公共字符串名称到私有字符串名称。我所说的听起来一定很混乱,但我不知道该怎么说,我只想能够理解这段代码是如何工作的。感谢任何帮助的人,这意味着很多

4

5 回答 5

1
  1. 程序从 function 开始main
  2. con它声明了一个类型为 的局部变量stan
  3. 使用参数调用setName对象的方法。con"Bruce Almighty"
  4. 带标题的方法void setName(string x)开始执行。参数x采用相应参数 ( "Bruce Almighty") 的值。
  5. 此对象的私有成员name设置为参数x( "Bruce Almighty") 的值。
  6. 方法setName返回到它被调用的点。
  7. cout代表控制台输出。
  8. 要应用 operator <<con.getName()需要进行评估。不带参数调用getName对象的方法。con
  9. 带标题的方法string getName()开始执行。不涉及参数。
  10. name返回此对象的私有成员的值( "Bruce Almighty")。
  11. 方法getName返回到它被调用的点 value "Bruce Almighty"
  12. cout使用此值并在控制台中生成它。
  13. 同一个cout对象endl在控制台中产生值。 endl在控制台中创建一个新行。
于 2013-09-01T06:38:54.420 回答
0

http://www.cplusplus.com/doc/tutorial/classes/

  • 类的私有成员只能从同一类的其他成员或他们的朋友访问。
  • 受保护的成员可以从它们的同一个类的成员和它们的朋友访问,也可以从它们的派生类的成员访问。
  • 最后,公共成员可以从对象可见的任何地方访问。

基本上,私有成员是只有类函数才能访问的东西。所以“字符串名称”只能从类函数中读/写。可以从类外部调用公共函数/变量,您给出的示例是“setName”和“getName”

因此,为了写入或读取私有字符串,您的代码使用您创建的公共函数。

于 2013-09-01T06:38:19.510 回答
0

基本步骤:

con.setName("Bruce Almighty");

调用该setname函数并将字符串传递"Bruce Almighty"给它。

void setName(string x)

接收您发送的字符串"Bruce Almighty",并调用它x

name = x;

x将的值赋给"Bruce Almighty"变量name

con.getName()

getName从函数中请求一个值。

string getName()

将函数声明getName为返回 a的函数string

return name;

获取保存在变量 中的字符串,该字符串name设置setName"Bruce Almighty"并将其返回给调用者,调用者将其发送给cout输出。

于 2013-09-01T06:39:25.617 回答
0

setName 是帮助您将字符串“Bruce Almighty”传递到 stan 村的私有名称字段的人。

你是说,“嘿,setName,我将传递“Bruce Almighty”参数作为你的参数x。我不在乎你是怎么做的,只需将它传递到私有名称字段!

setName 说:“好吧,我明白了,你的意思是我的x参数是全能的布鲁斯,对吗?”

你说:“是的,对!”

setName 说。“好了,我说完了,你不需要知道我是怎么做到的,这就是我们所说的抽象,你只是简单的命令,但你不需要了解我是怎么做到的。但是,以防万一你想要要知道,我是通过赋值运算符=来实现的。我将私有名称字段放在左侧,将我的参数x放在右侧。因为您为我的参数x提供了全能布鲁斯,所以将它分配给私有名称场。轰隆隆!

于 2013-09-01T06:41:27.263 回答
0

在类定义中,您可以仅使用其名称访问数据成员。例如,在setNamebody 内部,所有成员的名称都在范围内,因此也是私有数据成员name。这样声明:

    name = x;

x将(的参数setName)的值分配给name私有数据成员。

但是,在命名成员时必须小心,因为如果局部变量与成员命名相同,则可能会出现名称冲突。您可以避免他们在您的成员前面加上this->如下前缀:

    this->name = x;

或使用命名约定,例如给任何数据成员的名称一个前缀:

    m_name = x;    // "m_" stands for "member"
...
private:
    string m_name;

this是一个 C++ 关键字,表示指向您调用方法(即成员函数)的对象的指针。它可用于在类定义中引用该对象。因此this->name意味着“在指针指向的对象内部调用的成员”namethis

于 2013-09-01T07:15:19.933 回答