Я сделал простой класс для представления координаты 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
Вопрос: почему мой вопрос объявляет переменную, вызывающую конструктор?
Что значит «нулевой указатель»? В вашем коде нет переменных типа указателя, поэтому ничего, что могло бы иметь значение «NULL». 'почему heck объявляет переменную, вызывающую конструктор?' Потому что это требует спецификация языка C++. –
C++ - это не Java. Я предлагаю вам получить хорошую книгу на C++ и не делать предположений о C++ на основе вашего фона Java. – Blastfurnace
В C++ вам не нужно делать 'new Point()' вещь для создания объекта. Когда вы объявляете «Point P», он создает объект в памяти стека, так как ваш конструктор имеет значения по умолчанию, поэтому конструктор получает вызов, а ваши 'x' и' y' получают значение по умолчанию – user007