我更改了一个基本的C ++类示例,以查看我是否真的了解OOP的工作原理。我在定义类和另外的rectc(7,8)
语句之后立即添加了cout
对象。但是,令我感到惊讶的是,rectc
并未出现在 locals 标签中。 rectc
确实出现在“自动”标签下,但是该图标不同于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;
}
答案 0 :(得分:4)
我没有要检查的VS,但是我的猜测是调试器中的“ Locals”选项卡将仅列出函数局部变量。
由于rect
和rectb
是在main
函数中定义的,因此它们在该函数中是“本地的”。如果您试图从函数外部访问它们,则编译器将不允许您访问它们。不仅如此,rect
和rectb
所引用的对象仅与函数一样长。函数返回时(即rect
和rectb
超出范围时),它们将被破坏。
rectc
是在main
函数的外部中定义的。 rect
和rectb
具有函数局部作用域,而rectc
具有全局作用域,可以在任何函数中使用*。因此rectc
将不会出现在“本地”调试器标签中。
* 严格来说,这不是正确的。引用rectc
的地方仍将需要能够看到其声明。当您的代码分散在多个文件和/或翻译单元中时,这一点很重要。这对您来说可能还不算什么,但是您会到达那里的。