投稿 资料上传 提问 搜索
您现在的位置是: 首页 > 问答 > 正文

如何在下类的组合中访问并改动私有成员?

代码如下:

#include <iostream>
using namespace std;
class Point {
public:
Point() { x = 0; y = 0; }
Point(int xx, int yy) { x = xx; y = yy; }
void setX(int xx) { x = xx; } void setY(int yy) { y = yy; }
int getX() { return x; } int getY() { return y; }
private:
int x;
int y;
};

class Circle {
public:
Circle(int _x, Point _y) :radius(_x), center(_y) { //Circle类的构造函数 cout <<_x<<_y.getX()<<_y.getY(); }
Circle(int X, int Y, int Z) :radius(X), center(Y, Z) { //Circle类的构造函数2 cout << X << Y << Z; }
public:

private:
int radius;
Point center;
};
int main() {
Circle c1(1, 0, 0); Point p(2, 2);
Circle c2(1, p);
return 0;
}
## ``1. 在不改变Point类的前提下,为Circle类新增move函数,有两个参数, 参数为移动的位移。例如: move(1,2)表示向右移动一个单位,向上移动2个单位。
2. 在主函数main()中,输出move前后的圆心位置和半径。
问题回复
  1. 简讯
    简讯IT技术之家

    在C++中,为了防止某些数据成员或成员函数从外部被直接访问,可以将它们声明为private,这样编译器会阻止任何来自外部非友元的直接访问,私有成员变量的常用访问方法如下:

    1. 通过公共函数为私有成员赋值

    #include <iostream>  
    using namespace std;

    class Test
    {
    private:
    int value1, value2;
    public:
    void setValue1(int a)
    {
    value1=a;
    }
    void setValue2(int b)
    {
    value2=b;
    }
    void print(void)
    {
    cout<<"value1="<<value1<<'\t'<<"value2="<<value2<<endl;
    }
    } ;

    int main()
    {
    Test test;
    test.setValue1(1);
    test.setvalue2(9);
    test.print( );
    return 0;
    }

    2.利用指针访问私有数据成员

    #include <iostream>  
    using namespace std;
    class Test
    {
    private:
    int value1,value2;
    public:
    void setValue1(int a)
    {
    value1=a;
    }
    void setValue2(int b)
    {
    value2=b;
    }
    void getVal_ab(int *val_a, int *val_b)
    {
    *val_a=value1; //提取value1,value2值
    		*val_b=value2;  
    }
    };
    int main()
    {
    Test test;
    test.setValue1(1);
    test.setValue2(9);
    int a,b;
    test.getVal_ab(&a,&b); //将 a=value1, b=value2
    cout<<a<<'\t'<<b<<endl;
    return 0;
    }

    3.利用函数访问私有数据成员

    #include <iostream>  
    using namespace std;
    class Test
    {

    private:
    int value1,value2;
    public:
    void setValue1(int a)
    {
    value1=a;
    }
    void setValue2(int b)
    {
    value2=b;

    }
    int getVaule1(void)
    {
    return vaule1; //返回vaule1
    }
    int getValue2(void)
    {
    return value2; //返回vaule2
    }
    };
    int main()
    {
    Test test;
    test.setValue1(1);
    test.setValue2(9);
    int a,b;
    a=test.getValue1();
    b=test.getValue2();
    cout<<a<<'\t'<<b<<endl;
    return 0;
    }

    4.利用引用访问私有数据成员

    #include <iostream>  
    using namespace std;
    class Test
    {
    private:

    int value1,value2;
    public:
    void setValue1(int a)
    {
    value1=a;
    }
    void setValue2(int b)
    {
    value2=b;
    }
    void getVal_ab(int &val_a, int &val_b)
    {
    val_a=value1; //提取value1,value2值
    val_b=value2;
    }

    };
    int main()
    {
    Test test
    test.setVaule1(1);
    test.setValue2(9);
    int a,b;
    test.getVal_ab(a, b); //将 a=value1, b=value2
    cout<<a<<'\t'<<b<<endl;
    return 0;
    }


    回复