为什么这里允许访问私有变量?
Why is accessing private variable allowed here?
我声明了这个类。我观察到,在方法距离(点b),如何可能访问点- b.x和b.y的私有成员?如果我试图在main中访问b.x和b.y,这是不允许的。
#include <iostream>
#include <cmath>
using namespace std;
class Point {
private:
int x, y;
public:
Point() {
cout << "Constructor called" << endl;
x = 0; y = 0;
}
~Point() {
}
void set(int a, int b) {
x = a;
y = b;
}
void offset(int dx, int dy) {
x += dx;
y += dy;
}
void print() {
cout << "(" << x << "," << y << ")" << endl;
}
// HERE
double distance(Point b) {
return (sqrt(pow(x-b.x, 2)+pow(y-b.y, 2)));
}
};
int main() {
Point p, q;
p.print();
p.offset(4, 3);
p.print();
q.set(10, 2);
cout << "Distance: " << p.distance(q) << endl;
return 0;
}
注意:我已经编译并运行程序在ideone.com
诸如private
、public
等访问说明符的概念适用于classes
,而不仅仅是类的对象。如果一个变量是类中的private
,并且该类的对象a有一个函数,该函数接受同一类的另一个对象B,则a可以访问B的私有成员,因为a和B属于同一个类。
复制构造函数依赖于:
#include <iostream>
using namespace std;
class A {
public:
A(){val = 1.0;}
//copy constructor
A(const A& _other) {
val = _other.val; //accessing private member of _other
}
double dist(A _a) {return val - _a.val;} //accessing private member of _other
private:
double val;
};
int main() {
A a;
A b;
cout << a.dist(b) << endl;
}
int x, y;
对于类点来说是私有的。这意味着类点的所有成员都可以访问、修改它。
类Point的函数和构造函数是公共的,即其他函数(来自其他类等)[如main]可以访问它们。oop的思想是保证数据的安全,任何想要修改值的人都可以通过该类的公共方法进行修改。他们不能直接访问它们。这允许您检查对数据的无效修改[设置无效值,如height = -4;
等]
如果你保持int x,y
为public
[这是不正确的OOPs],任何函数(main等)都可以访问它并将其值修改为不希望的值。
Point p;
p.x = -5
(假设您只想为x设置5个值,您无法检查访问函数是否设置了一些不希望的值)'
相关文章:
- 从不同C++类的成员变量访问成员函数
- 在主函数中C++私有变量访问
- 互锁变量访问(在布尔值上)和 std::atomic_flag 之间的区别
- C++中的变量访问内联函数
- 无法使用子类变量访问超类公共成员
- 优化成员变量访问
- Ifstream:打开可使用变量访问的文件
- 使用'this->'成员变量访问的性能
- 从成员变量访问静态 constexpr 成员,GCC 错误?
- TLS变量访问的结果未缓存
- 通过const成员变量访问内联函数
- 获取通过环境变量访问的文件的位置
- 静态变量访问
- 从函数变量访问结构变量的成员
- 从另一个变量访问变量
- 使用变量访问结构中的任何数据
- 如何使用另一个变量访问对象的变量/方法
- 使用用户变量访问结构的成员?C++
- 我需要通过基类静态变量访问派生类成员
- 如何将一个文件中存在的全局常量变量访问到另一个文件