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. contypeのローカル変数を宣言しますstan
  3. setNameobject のメソッドがcon引数 で呼び出されます"Bruce Almighty"
  4. 見出しを持つメソッドvoid setName(string x)が実行を開始します。パラメーターxは、対応する引数 ( "Bruce Almighty") の値を取ります。
  5. このオブジェクトのプライベート メンバは、パラメータ( )nameの値に設定されます。x"Bruce Almighty"
  6. メソッドsetNameは、呼び出されたポイントに戻ります。
  7. coutコンソール出力を表します。
  8. operator を適用する<<con.getName()は、評価する必要があります。getNameobject のメソッドが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を返す関数として関数を宣言しますstring

return name;

変数nameに保持されている文字列を取得し、これを にsetName設定し"Bruce Almighty"て呼び出し元に返します。呼び出し元coutは出力のために に送信します。

于 2013-09-01T06:39:25.617 に答える
0

クラス定義内では、名前だけを使用してデータ メンバーにアクセスできます。たとえばsetName、 body 内部では、すべてのメンバーの名前がスコープ内にあり、プライベート データ member も含まれ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 に答える
0

setName は、あなたの文字列「Bruce Almighty」をスタン村の個人名フィールドに届けるのを手伝ってくれる人です。

あなたは、「setName さん、私は "Bruce Almighty" 引数をパラメーターxとして渡します。あなたがどのようにそれを行うかは気にしませんが、単に個人フィールドに渡すだけです!

setName は、「わかりました。私のxパラメーターは Bruce Almight ですよね?」と言います。

あなたは「そうだね!」と言います。

setName は言います。「わかりました。これで終わりです。私がどのようにそれを行ったかを知る必要はありません。これが私たちが抽象化と呼んでいるものです。注文するだけですが、私がどのようにそれを行ったかを理解する必要はありません。ただし、必要な場合に備えてちなみに、代入演算子=を使ってやってみました. プライベートネームのフィールドを左側に配置し、パラメータxを右側に配置しました. パラメータxに Bruce Almighty を指定してくださったので、プライベートネームに割り当てられます.フィールド。ブーム!」

于 2013-09-01T06:41:27.263 に答える