質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.10%

この一文は必要ですか?

解決済

回答 4

投稿

  • 評価
  • クリップ 0
  • VIEW 864

question_april

score 82

こんにちは

今C++を勉強しているのですが、こちらのサイト様で学んでいてわからない点がありました。
下記の
private:
    string name;
は消してもよいのではないですしょうか??m(__)m


//こちらが全文
class Neko
{
private:
    string name;
public:
    Neko(string s){
        name = s;
    }
    void naku(){
        cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
    }
};

もし宜しければ回答お願いいたします。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

必要です。
string nameのようなもののことを、クラスのメンバー変数と言います。

Neko neko("argius");
neko.naku();
のように使う場合、"argius"の格納場所がstring nameの部分です。
neko.naku()が呼ばれた時に、naku()の中で使用されるnamestring nameに格納された文字列が使用されます。

なお、privateにすることによって、外部からneko.nameのようなアクセスができないようにしています。
classの場合はデフォルトがprivatestructの場合はデフォルトがpublic

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/19 20:22

    回答ありがとうございます!

    メンバ変数というのですね!調べてみます!

    そして、とてもわかりやすいです!有難うございました!!

    キャンセル

0

猫の名前を保持する変数 name は、2つのpublic関数の中で使われていますから、どこかで宣言しておく必要があります。

消したら、nameが宣言されなくなるので、コンパイルエラーになります。


投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/19 20:23

    回答ありがとうございます!

    キャンセル

0

Neko(string s)void naku()
内でnameを使っています。

c++では宣言のない変数は使えません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/19 20:23

    回答ありがとうございます!

    キャンセル

0

private:
    string name;
をなくした場合、次のようになります。

class Neko
{
public:
    Neko(string s){
        name = s;
    }
    void naku(){
        cout<<"にゃあ。俺様は"<<name<<"だ。"<<endl;
    }
};

Nake() 中の name = s の name
nake() 中の name 
は、どこかで宣言をしないとエラーになってしまいます。

質問文にあったサイトでも次の説明があります。
...
今書いているのは、個別の「猫」ではなく、その設計図ですが、もちろん、設計図に「名前」の置き場所を書いておく必要があります。それが4行目の
   string name:
です。これは、文字列の「いれもの」ですが、これをクラスの定義の中に書いたわけです。
...

続けて次の説明があります。
...
前後にあるprivate:とpublic:ははじめの内はあまり気にしないでください。private:とあるのは、
その下のものはそのクラスにプライベート(非公開)なもので他のクラスのものはさわれないという意味です。
一方、public:の下にあるものは、そのクラスの外でも使える(つまり、公開)という意味になります。その意味は、次回以降に説明します。
...

そして、次のページにはこんな説明があります。
...
クラス内にある変数は、メンバ変数とかデータメンバといいます。また、クラス内の関数はメンバ関数といいます。要するに、クラス内のものはメンバなのですね。
...
ところで、どうしてデータを非公開にするのだろうと思っているかもしれません。これは、初心者にはなかなか難しい話題です。
簡単に言うと、「間違ってデータを変更できないようにする」ためなのです。
実は、長いプログラムでは、変更すべきでないデータを間違って変更してしまうというミスをしがちです。これを防ぐことができるのです。
...

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る