C++ 调用默认构造函数出错

文章讨论了在C++中通过默认无参构造函数实例化对象时,为何未执行无参构造函数的问题,指出编译器将`Pointp();`解析为函数声明,解决方法是实例化时不使用小括号。

一、问题描述

        今天在想通过默认无参的构造函数实例化一个对象时,发现根本没调用动,代码如下:

#include <iostream>

using namespace std;

class Point {
	protected :
		double x;
		double y;
		
	public :
		Point(int a, int b) : x(a), y(b) {}
		Point() {
			Point(0, 0);
			cout << "执行了无参构造函数" << endl;	
		}
		
		void setX(double v) {
			this->x = v;
		}
		double getX() {
			return x;
		}
		
		void setY(double v) {
			this->y = v;
		}
		double getY() {
			return y;
		}
}; 

int main() {
	Point p();
	
	return 0;
}

        结果什么都没输出,没有预期的“执行了无参构造函数”这句话。

二、原因

        当我把小括号去掉进行实例化后,发现就可以调用了。


int main() {
	Point p;
	
	return 0;
}

        查阅资料发现,编译器将Point p();这条语句看做了一个函数声明。因此,如果以后要调用无参默认构造函数,不要加小括号即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值