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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

4344閲覧

引数がクラスの値渡し、ポインタ、参照

reotantan

総合スコア295

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2015/11/16 01:28

colorとownerをprivateにしたまま、
この関数を利用することってできますか?(修正をいれて)
ポインタを使うからprivateでも大丈夫なのではないかなと考えていたのですが、
駄目でした。
助言をいただきたいです。

コード void Dog::valfunc(Dog v1){ cout<<v1.color<<endl; cout<<v1.owner<<endl; } void ptrfunc(const Dog *p1){ cout<<p1->color<<endl; cout<<p1->owner<<endl; } void reffunc(const Dog &r1){ cout<<r1.color<<endl; cout<<r1.owner<<endl; }

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんにちは。
privateで定義すると、「クラス外部」からアクセスできなくなります。
ポインタ経由とか直接とかでは変わりません。

この関数を利用することってできますか?(修正をいれて)

Dogクラスを修正しないでDogクラスのprivateメンバーへ他からアクセスすることは、やるべきではありません。
privateで定義したと言うことは、他から直接アクセスして欲しくないのです。将来実装方法が変わる可能性を考慮して、このようにすることは非常に多いです。

Dogクラスを修正し、クラスの主旨に一致した適切なメンバー関数を設けてcolorやownerを操作できるようにするのが適切です。
色や飼い主なら、それらを直接返却するメンバ関数を設ける程度で良さそうに感じます。

投稿2015/11/16 01:35

編集2015/11/16 01:38
Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

reotantan

2015/11/16 23:41

そうですね、そのためのprivateですね。 ありがとうございました!
guest

0

解決策はいくつかあります。

  1. Dogクラス側にcolorやownerの値を返すメンバ関数を作って、外部からはそれを使う方法
  2. (どうしても必要な場合のみの技ですが)Dog側でfriend宣言をする方法

基本的には、前者をおすすめします。

投稿2015/11/16 01:34

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問