privateのメンバ変数の参照方法他が分かりません
学校の課題で、下のプログラムを改変して実行できるようにせよという課題です。
ヘッダファイル(Circle.h)
#include <stdio.h>
class Circle {
private:
int x, y;
int rad;
public:
Circle (); // 関数の内容は記述しない
Circle (int cx, int cy, int r = 10);
void setPosition (int x, int y);
void setRadius (int rad);
int getRadius ();
void draw ();
};
ソースファイル(Circle.cpp)
#include "Circle.h"
Circle::Circle () { // 引数を指定しない構築子
x = y = 0; rad = 10;
}
Circle::Circle (int cx, int cy, int r) { // 引数を指定する構築子
x = cx; y = cy; rad = r;
}
void Circle::setPosition (int x, int y) {
this->x = x; this->y = y; // this->x はメンバ変数の x であり,引数 x とは異なる変数!
}
void Circle::setRadius (int rad) {
this->rad = rad; // this->rad と rad は異なる変数!
}
int Circle::getRadius () {
return rad;
}
void Circle::draw () {
printf ("位置(%d,%d)に半径%dの円を描画\n", x, y, rad);
}
メイン(main.cpp)
#include "Circle.h"
int main () {
int p[2], r;
for (int i = 0; i < 10; i++) {
Circle circ = new Circle (i+10, 2i+10, 15*(i+1)); // 値を代入しながらの生成
p[0] = circ->x; // エラー!
p[1] = circ->y; // エラー!
r = circ->rad; // エラー!
printf("Position = %d, %d, Radius = %d\n", p[0], p[1], r);
circ->draw ();
}
return (1);
}
このまま実行すると以下のようなエラーが出ます
Circle.h: 関数 ‘int main()’ 内:
Circle.h:5:9: エラー: ‘int Circle::x’ は非公開です
int x, y;
^
main.cpp:7:22: エラー: within this context
p[0] = circ->x; // エラー!
^
In file included from main.cpp:1:0:
Circle.h:5:12: エラー: ‘int Circle::y’ は非公開です
int x, y;
^
main.cpp:8:22: エラー: within this context
p[1] = circ->y; // エラー!
^
In file included from main.cpp:1:0:
Circle.h:6:9: エラー: ‘int Circle::rad’ は非公開です
int rad;
^
main.cpp:9:19: エラー: within this context
r = circ->rad; // エラー!
^
課題の要点は、メンバ変数x、yがprivateになっているので、それを参照する関数
void getPosition(int xy[])を作成し、さらにmain.cppが正常に動作するように、変数p[]、rに値を代入できる文に書き換えるというものです。ネットでいろいろ調べて試したのですが、うまくいかなかったので質問した次第です。環境はlinuxです。回答よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー