getR和setR
时间: 2023-09-02 07:09:32 浏览: 293
getR和setR是一些编程语言中常见的命名约定,用于获取或设置一个对象的属性值。
通常情况下,一个对象的属性都被定义为私有的,不允许直接从外部访问或者修改。为了让外部代码可以获取或者修改这些属性,我们需要在对象中定义一些公有的方法(也就是getter和setter方法)。
其中,getter方法用于获取对象的属性值,而setter方法则用于设置对象的属性值。在一些编程语言中,这些方法通常被命名为getR和setR,其中R表示需要获取或者设置的属性名。
例如,在Java中,我们可以使用以下方式定义一个公有的getter和setter方法:
```
public class Person {
private String name;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
}
```
在这个例子中,我们定义了一个名为name的私有属性,并提供了一个公有的getName方法和一个公有的setName方法,用于获取和设置这个属性的值。通过这种方式,外部代码就可以使用这些方法来访问和修改这个属性的值,而不需要直接访问这个属性本身。
相关问题
2、 程序填空(共10分,每空2分) 设计一个圆Circle类,求圆的面积。Circle有1个私有成员数据m_r,3个公有成员函数setR、getR、 getArea。请补全程序。 #include <iostream> using namespace std; #define Pi 3.14 // 宏定义 π class Circle { private: double m_r; public: void setR(double r) { (1) } double (2) { return m_r; } double getArea() { return (3) ; } }; int main() { Circle c; c.setR(3); cout<<"Circle's r is "<< (4) <<endl; cout<<"Circle's area is "<< (5) <<endl; return 0; }
2.
```c++
#include <iostream>
using namespace std;
#define Pi 3.14 // 宏定义 π
class Circle {
private:
double m_r;
public:
void setR(double r) {
m_r = r;
}
double getR() {
return m_r;
}
double getArea() {
return Pi * m_r * m_r;
}
};
int main() {
Circle c;
c.setR(3);
cout<<"Circle's r is "<<c.getR()<<endl;
cout<<"Circle's area is "<<c.getArea()<<endl;
return 0;
}
```
#include<iostream> #include<string> using namespace std; //点和圆关系 //圆类 class Circle { public: void setR(int r) { m_R = r; } int getR() { return m_R; } void setCenter(Point center) { m_Center = center; } Point getCenter() { return m_Center; } private: int m_R; Point m_Center; }; class Point{ public: void setX(int x) { m_X = x; } void setY(int y) { m_Y = y; } int getX() { return m_X; } int getY() { return m_Y; } private: int m_X; int m_Y; }; //判断点和圆关系 void isInCircle(Circle& c, Point &p) { //计算两点距离平方 int distance =(c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY()); //计算半径的平方 int rdistance = c.getR() * c.getR(); if (distance == rdistance) { cout << "点在圆上" << endl; } else if (distance > rdistance) { cout << "点在圆外" << endl; } else { cout << "点在圆内" << endl; } } int main() { Circle c; c.setR(10); Point center; center.setX(10); center.setY(0); c.setCenter(center); Point p; p.setX(10); p.setY(10); isInCircle(c, p); system("pause"); return 0; }
以上代码存在一个问题:在 Circle 类中用到了 Point 类,但是 Point 类的定义在 Circle 类之后,导致编译器无法识别 Point 类。可以通过将 Point 类的定义放在 Circle 类之前来解决这个问题,或者使用前向声明(forward declaration)来提前声明 Point 类的存在,以便编译器能够识别。以下是使用前向声明的修改代码:
```c++
#include<iostream>
#include<string>
using namespace std;
// 前向声明
class Point;
// 圆类
class Circle {
public:
void setR(int r)
{
m_R = r;
}
int getR()
{
return m_R;
}
void setCenter(Point center)
{
m_Center = center;
}
Point getCenter()
{
return m_Center;
}
private:
int m_R;
Point m_Center;
};
// 点类
class Point {
public:
void setX(int x)
{
m_X = x;
}
void setY(int y)
{
m_Y = y;
}
int getX()
{
return m_X;
}
int getY()
{
return m_Y;
}
private:
int m_X;
int m_Y;
};
// 判断点和圆关系
void isInCircle(Circle& c, Point& p) {
// 计算两点距离平方
int distance = (c.getCenter().getX() - p.getX()) * (c.getCenter().getX() - p.getX()) + (c.getCenter().getY() - p.getY()) * (c.getCenter().getY() - p.getY());
// 计算半径的平方
int rdistance = c.getR() * c.getR();
if (distance == rdistance)
{
cout << "点在圆上" << endl;
}
else if (distance > rdistance)
{
cout << "点在圆外" << endl;
}
else
{
cout << "点在圆内" << endl;
}
}
int main() {
Circle c;
c.setR(10);
Point center;
center.setX(10);
center.setY(0);
c.setCenter(center);
Point p;
p.setX(10);
p.setY(10);
isInCircle(c, p);
system("pause");
return 0;
}
```
在上述代码中,我们使用了 `class Point;` 前向声明 Point 类,通知编译器 Point 类的存在,以便 Circle 类能够正常使用。
阅读全文