尝试使用指针访问类外的私有变量,使用类外的成员函数

时间:2016-10-10 21:57:07

标签: c++ pointers

我试图绕过指针,所以我一直在阅读和尝试。 目前我试图将成员函数放在类之外,但是能够从main函数内部访问私有变量。从我所读到的,除非我在课堂上有一个指针,否则无法完成。 所以我尝试了一个函数,它返回一个指向我的私有变量的指针,该类包含在类之外的所有其他成员函数。 但是,当我尝试读取私有变量时,我遇到了编译问题。

我试过阅读其他帖子并尝试他们的解决方案,但我只是变得更加困惑。 理想情况下,我希望有一个名为" area"的成员函数。在类之外传递一个指向私有变量的指针" radius"并返回该地区。

这就是我目前所拥有的:

#include <iostream>
#define PI 3.14159;
using namespace std;

class Circle{
private:
    float radius;   
protected:
    float *radPtr = &radius;
public:
    float getRadiusPtr(){  
        return *radPtr;
    }
    void getRadius();
    void showRadius();
};
void Circle::getRadius() {
    cout << "Enter Radius: "<< endl;
    cin >> radius;
}

void Circle::showRadius(){
         cout << "Radius: " << endl;
    }

float Circle::area(*radPtr){
    float ar;
    float r = this.getRadiusPtr();
    ar = PI * r * r;
}


int main(){
    Circle c1;
    c1.getRadius();
    c1.showRadius();
    cout << "Area: " << a << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:1)

您不能在成员函数之外使用&radius,因为没有特定对象的radius成员应该获取地址。

此外,您的getRadiusPtr()函数甚至不返回指针。它只返回radius的值。

尝试:

float *getRadiusPtr() {
    return &radius;
}

然后你就可以使用它:

int main() {
    Circle c1;
    c1.getRadius();
    c1.showRadius();
    float *r = c1.getRadiusPtr();
    float a = PI * *r * *r;
    cout << "Area: " << a << endl;
    return 0;
}

DEMO