我做了一个简单的类来表示x,y坐标。它有两种封装int和下面的构造:为什么声明变量调用构造函数
//point.h
Point(int x = 3, int y = 5); // not zero for example purposes
//point.cpp
Point::Point(int x, int y) : x(x), y(y) {}
然后我有一个文件main.cpp
:
#include "point.h"
#include <iostream>
int main() {
Point p;
std::cout << "x: " << p.getX() << " y: " << p.getY() << std::endl;
p.setX(7);
p.setY(9);
std::cout << "x: " << p.getX() << " y: " << p.getY() << std::endl;
}
从Java背景的,我希望这会拿出一个空指针,但它会打印:
x: 3 y: 5
x: 7 y: 9
我的问题是为什么heck确实声明了一个变量调用构造函数?
你是什么意思,“空指针”?代码中没有指针类型的变量,所以没有可能具有“NULL”值的任何变量。 '为什么heck声明一个变量调用构造函数?'因为C++语言规范要求。 –
C++不是Java。我建议你得到一本好的C++书,并且不要根据你的Java背景对C++做出假设。 – Blastfurnace
在C++中,您并不需要执行'new Point()'来实例化对象。当你声明'Point P'时,它会在堆栈内存中创建一个对象,因为你的构造函数具有默认值,所以构造函数被调用,你的'x'和'y'得到默认值 – user007