注册 登录
编程论坛 C++教室

C++构造函数

吕孟伟 发布于 2020-03-21 20:59, 2471 次点击
程序代码:
#include<iostream>
using namespace std;

class Box{
     private:
         double length;
         double breadth;
         double height;
     public:
       Box(double len, double bre, double hei);//这是构造函数。
       Box(){};//请问,这是什么函数?
               
//若没有这句,错误有两个,在下方已标出。
               
//若没有{},也会出现错误。
       double GetVolume(void);
       Box operator+ (const Box&);
      
};
Box::Box(double len, double bre, double hei){
    length = len;
    breadth = bre;
    height = hei;
}
double Box::GetVolume(void){
    return length * breadth * height;
}
Box Box::operator+ (const Box& obj){
          Box box;//错误一:[Error] no matching function for call to 'Box::Box()'
          box.length = this->length + obj.length;
          box.breadth = this->breadth + obj.breadth;
          box.height = this->height + obj.height;
          return box;
}

int main(void)
{
        Box box1(2.0, 4.0, 6.0);
        Box box2(1.0, 2.0, 3.0);
        Box box3;//错误二:[Error] no matching function for call to 'Box::Box()'
        double Volume = 0.0;
        Volume = box1.GetVolume();
        cout << "BOX1'Volume is " << Volume << endl;
        Volume = box2.GetVolume();
        cout << "BOX2'Volume is " << Volume << endl;
        box3 = box1 + box2;
        Volume = box3.GetVolume();
        cout << "BOX3'Volume is " << Volume << endl;
    return 0;

 }

6 回复
#2
rjsp2020-03-21 21:58
缺省构造函数
#3
倾听心跳2020-03-25 09:32
Box(double len, double bre, double hei);//这是构造函数的重载,也是构造函数。
 Box(){};//这个是默认的构造函数
#4
d7se1232020-03-31 13:47
如果你不写构造函数 c++编译器提供一个默认的无参构造函数
如果你写了一个带参的构造函数 默认的无参构造函数不再提供
例如 Box(double len, double bre, double hei); 所以你在调用构造有参函数的时候,需要参数匹配
Box box1(2.0, 4.0, 6.0);
因为默认无参不再提供,所以你后面 Box box;出错 ,因为没有匹配的无参构造
#5
fsqdbdx2020-03-31 15:12
学习学习
#6
生命太短暂2020-05-02 10:19
昨天正好接触到这了
Box(){};是一个空构造,就是含空主体的默认构造函数,它和默认构造函数相同,唯一的区别是Box()=default,即使没有初始化变量也可以进行初始化
目前我知道构造函数有
1无参构造Box()
2有参构造Box(double len, double bre, double hei);
3默认构造,默认构造里面有3个知识点,前两个已经说了,还有一个是即使没有构造函数,系统也会自己创建一个公共的默认构造,不过是隐式的
#7
Thnnn2020-05-06 10:45
学习学习
1