首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++ 訪問私有成員變量的四種常用方法

     編輯:關於C++

背景

C++ 類的私有成員(private)不可被外部直接訪問,需通過公有接口間接操作。以下是四種常見模式。

1. 公有 setter/getter 函數

最標準、封裝性最好的方式。

class Test {
    int x, y;
public:
    void setX(int a) { x = a; }
    void setY(int b) { y = b; }
    int getX() const { return x; }
    int getY() const { return y; }
    void print() const { cout << "x=" << x << ", y=" << y << endl; }
};

int main() {
    Test t;
    t.setX(1); t.setY(9);
    cout << "x=" << t.getX() << ", y=" << t.getY() << endl;
    t.print();
}

2. 指針參數提取值

通過傳入指針讓成員函數寫入值。

class Test {
    int x, y;
public:
    void setX(int a) { x = a; }
    void setY(int b) { y = b; }
    void getXY(int* px, int* py) { *px = x; *py = y; }
};

int main() {
    Test t; t.setX(1); t.setY(9);
    int a, b; t.getXY(&a, &b);
    cout << "x=" << a << ", y=" << b << endl;
}

3. 函數返回值獲取

直接返回私有成員值(適用於基本類型)。

class Test {
    int x, y;
public:
    void setX(int a) { x = a; }
    void setY(int b) { y = b; }
    int getX() const { return x; }
    int getY() const { return y; }
};

int main() {
    Test t; t.setX(1); t.setY(9);
    int a = t.getX(), b = t.getY();
    cout << "x=" << a << ", y=" << b << endl;
}

4. 引用參數提取值

用引用代替指針,語法更簡潔。

class Test {
    int x, y;
public:
    void setX(int a) { x = a; }
    void setY(int b) { y = b; }
    void getXY(int& rx, int& ry) { rx = x; ry = y; }
};

int main() {
    Test t; t.setX(1); t.setY(9);
    int a, b; t.getXY(a, b);
    cout << "x=" << a << ", y=" << b << endl;
}

對比與建議

方法優點缺點適用場景
setter/getter封裝性強,可加驗證邏輯略顯繁瑣通用首選
指針參數可一次取多值,兼容 C 風格需檢查空指針需批量輸出、或接口固定為指針
返回值語法簡單直觀只能返回單值,大對象拷貝開銷基本類型、輕量對象
引用參數無拷貝、語法乾淨需保證引用有效現代 C++ 首選輸出參數方式

總結

所有方法本質都是「提供公有成員函數作為受控訪問通道」。現代 C++ 推薦優先使用 const getter 返回值(得益於 RVO/移動語義)或 引用參數輸出多值。避免直接暴露私有成員或使用 friend 破壞封裝。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved