我修改了一个基本的 C++ 类示例,以查看我是否真的了解 OOP 的工作原理。我rectc(7,8)
在定义类和附加cout
语句后立即添加了一个对象。但是,我很惊讶rectc
没有出现在本地选项卡中。rectc
确实出现在Autos选项卡下,但该图标rect
与 &旁边的图标不同rectb
。这里到底发生了什么?
// Rectangle Project.cpp : class constructor
//
#include <iostream>
using namespace std;
class CRectangle {
int width, height;
public:
CRectangle (int, int);
int area() {
return (width*height);
}
} rectc(7,8);
CRectangle::CRectangle (int a, int b) {
width = a;
height = b;
}
int main() {
CRectangle rect(3, 4);
CRectangle rectb(5, 6);
cout << "rect area: " << rect.area() << endl;
cout << "rectb area: " << rectb.area() << endl;
cout << "rectc area: " << rectc.area() << endl;
return 0;
}
我没有要检查的 VS,但我的猜测是调试器中的“本地”选项卡只会列出函数局部变量。
由于rect
和rectb
是在main
函数中定义的,因此它们是该函数的“本地”。如果您试图从函数外部访问它们,编译器不会让您这样做。不仅如此,由rect
和引用的对象的rectb
持续时间与函数一样长。当函数返回时(即当rect
和rectb
超出范围时),它们将被破坏。
rectc
,另一方面,是在函数之外定义的main
。whilerect
和rectb
have function local scope,rectc
具有全局作用域并且可以在任何函数中使用*。因此rectc
不会出现在“locals”调试器选项卡中。
*这不完全正确。地点引用rectc
仍然需要能够看到它的声明。当您的代码跨多个文件和/或翻译单元拆分时,这一点很重要。这对你来说可能还没有多大意义,但你会到达那里。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句