2

このクラスを宣言しました。メソッド distance(Point b) で、どのようにして Point - bx および by のプライベート メンバーにアクセスできるかを観察しました。main で bx と by にアクセスしようとすると、許可されません。

#include <iostream>
#include <cmath>

using namespace std;

class Point {
private:
    int x, y;
public:
    Point() {
        cout << "Constructor called" << endl;
        x = 0; y = 0;
    }

    ~Point() {
    }

    void set(int a, int b) {
        x = a;
        y = b;
    }

    void offset(int dx, int dy) {
        x += dx;
        y += dy;
    }

    void print() {
        cout << "(" << x << "," << y << ")" << endl;
    }

    // HERE
    double distance(Point b) {
        return (sqrt(pow(x-b.x, 2)+pow(y-b.y, 2)));
    }
};

int main() {
Point p, q;

p.print();
p.offset(4, 3);
p.print();

q.set(10, 2);

cout << "Distance: " << p.distance(q) << endl;

return 0;
}

注: ideone.com でプログラムをコンパイルして実行しました

4

2 に答える 2

0

int x, y;Class Point に対してプライベートです。これは、Class Point のすべてのメンバーがアクセス、変更できることを意味します。

クラスポイントの関数とコンストラクターは公開されています。つまり、他の関数(他のクラスなどから)[メインなど]はそれらにアクセスできます。OOPS の考え方は、データを安全に保つことです。値を変更したい人は誰でも、そのクラスのパブリック メソッドを介して変更できます。直接アクセスすることはできません。これにより、データへの無効な変更をチェックし続けることができます[無効な値の設定height = -4;など]

[これは正しい OOP ではありません] のままにしておくint x,yと、public任意の関数 (メインなど) がそれにアクセスして、値を望ましくないものに変更できます。

Point p;

p.x = -5( x の +ve 値のみが必要だとすると、アクセスする関数が望ましくない値を設定しているかどうかを確認できません)`

関連する例えではありませんが、それでも...家の中に家族だけがアクセスできる部屋があります。家の中の物を保管したり、取り除いたり、何かをしたい部外者は、家族に頼まなければなりません。家族でさえ部屋へのアクセスが許可されていないと仮定した場合[メンバー関数でさえ変数にアクセスできないと仮定して]、部屋に何も保管しても意味がありません[データは誰にも使用できません]

于 2013-04-01T06:31:51.663 に答える