2014年4月28日 星期一

C++ Nested Classes 巢狀類別

在巢狀類別結構中,外部類別不能存取內部類別的私用成員,如果想要存取內部類別的私用成員的話,必須宣告外部類別為friend,例如:
class PointDemo {
    ...

private:

    // Nested Class
    class Point {
        friend class PointDemo;
        ....
    };
    ....
};

同樣的,內部類別不可存取外部類別的私用成員,如果要存取私用成員的話,必須宣告其為friend,例如:
class PointDemo {
public:
    ...
    friend class Point;

private:
    // Nested Class
    class Point {
        ....
    };
    ....
};
======================================


在coding時,可以將內部類別獨立定義在一個檔案中,例如: 
file: PointDemo.h
class PointDemo {
public:
    PointDemo(int);
    ~PointDemo();
    void show();
private:

    // Nested Class
    class Point;
    Point **_points;
    int _length;
};

file: Point.h
class PointDemo::Point {
public:
    Point();
    Point(int, int);
    int x() { return _x; }
    int y() { return _y; }
    void x(int x) { _x = x; }
    void y(int y) { _y = y; }
private:
    int _x;
    int _y;
};

沒有留言:

張貼留言