为了账号安全,请及时绑定邮箱和手机立即绑定

这个在构造函数里的那一部分有点不懂(问题在代码上附着,真心求解)

#include <iostream>

using namespace std;

class Coordinate

{

    

public:

Coordinate(int x,int y)//这里也不能传参数进去吗?

{

   m_iX=x;//就是在这个地方,为什么不能在里面加这两行

   m_iY=y;

}

// 打印坐标的函数

void printInfo()  

{

   cout<<"("<<m_iX<<","<<m_iY<<endl;

}

public:

int m_iX;

int m_iY;

};

int main(void)

{

//定义对象数组

    Coordinate coorArr[2];

    coorArr[0].m_iX=1;

    coorArr[0].m_iY=2;

    coorArr[1].m_iX=3;

    coorArr[1].m_iY=4;

//遍历数组,打印对象信息

for(int i = 0; i < 2; i++)

{

coorArr[i].printInfo();

}

return 0;

}


正在回答

4 回答

Coordinate coorArr[2];这一句的意思是使用默认构造函数(不含参数的)生成两个对象。但类没有构造函数的时候系统会自动生成一个无参构造函数,也就是默认构造函数。但是当你自己定义了构造函数了,系统就不会再给你自动生成构造函数。你的类只有你定义了一个由参构造函数,所以你只能用你定义的那个有参函数去创建对象例如:Coordinate coor(1,2)这是栈中或Coordinate *co =new Coordinate(1,2)这是堆中。上面那句代码需要调用无参构造函数,你没有,所以会报错创建不成功。你可以自己再加一个无参构造函数就行了。

2 回复 有任何疑惑可以回复我~
#1

老有意思了 提问者

我在定义构造函数的时候 Coordinate(int x=0,int y=0) 这样也是可以的对吧
2019-07-26 回复 有任何疑惑可以回复我~

我赞同“我是尘风呀”的回答,简单来说,就是你自己在类中定义的构造函数是有参数的,但是你在main函数中调用Coordinate类的时候并没有给它参数,例如:Coordinate coorArr(1, 2);执行时可以通过的。    所以,编译器肯定会报错。

0 回复 有任何疑惑可以回复我~

Coordinate coorArr[2];

这一句应该对应默认构造函数

Coordinate()

{

}

但是你的类里面没有默认构造函数,

0 回复 有任何疑惑可以回复我~
#1

老有意思了 提问者

已经明白了,谢谢了
2019-07-26 回复 有任何疑惑可以回复我~

含参构造函数是没有问题的,问题在于在堆上使用没有默认构造函数去开辟空间;

#include <iostream>

using namespace std;

class Coordinate

{

public:

Coordinate(int x, int y)

{

m_iX = x;

m_iY = y;

}

// 打印坐标的函数

void printInfo()

{

cout << "(" << m_iX << "," << m_iY << ")"<<endl;

}

public:


int m_iX;

int m_iY;

};


int main(void)


{

Coordinate coorArr(1,2);

coorArr.printInfo();


//Coordinate *m_pCoorArr = new Coordinate[2];   // 报错

system("pause");

return 0;

}


0 回复 有任何疑惑可以回复我~
#1

老有意思了 提问者

还是有点没看懂,我那个不是在栈上生成的吗
2019-06-04 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70930    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

这个在构造函数里的那一部分有点不懂(问题在代码上附着,真心求解)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信