【C++】类:构造函数、默认构造函数模板

目录

模板一:两个类名构造函数,一个传参,一个不传参

 模板二:成员初始化列表(推荐,性能高)

构造函数、默认构造函数的作用:

 构造函数:传一些参数进来,用于给类的成员变量赋值。

默认构造函数:程序员给类的成员变量设定一个默认值,也是用于给类的成员变量赋值。如果没传参就用默认值给成员变量赋值。如果传了参就用传进来的参数给成员变量赋值。
 

模板一:构造函数用 类名(参数列表){},默认构造函数用 类名(){成员变量=默认值};

模板一:两个类名构造函数,一个传参,一个不传参。

#include <iostream>
using namespace std;

class 类名
{
public:
    类名(传入的参数列表 int a,int b,int c,....) {
        类成员变量A = 传参a;
        类成员变量B = 传参b;
        类成员变量C = 传参c;
    }
    类名() {
        类成员变量A = 0;
        类成员变量B = 0;
        类成员变量C = 0;
    }

         ...一些表达功能的类成员函数
    }
private:
    int 类成员变量A; 
    int 类成员变量B;
    int 类成员变量C;   
};


int main()
{
    类名 对象名(实参表);
    类名 对象名;
    类名 *指针变量名 = new 类名(实参表);
    类名 *指针变量名 = new 类名;
}

 在建立对象的同时,采用构造函数给数据成员赋值,通常有以下两种形式。此外加不加实参表都可以,不加的话按默认构造函数赋值。

类名 对象名[(实参表)]
Score op1(99, 100);
op1.showScore();
类名 *指针变量名 = new 类名[(实参表)]
Score *p;
p = new Score(99, 100);
p->showScore();
-----------------------
Score *p = new Score(99, 100);
p->showScore();

说明:

  1. 构造函数的名字必须与类名相同,否则编译程序将把它当做一般的成员函数来处理。
  2. 构造函数没有返回值,在定义构造函数时,是不能说明它的类型的。
  3. 与普通的成员函数一样,构造函数的函数体可以写在类体内,也可写在类体外。
  4. 构造函数一般声明为共有成员,但它不需要也不能像其他成员函数那样被显式地调用,它是在定义对象的同时被自动调用,而且只执行一次。
  5. 构造函数可以不带参数。
扫描二维码关注公众号,回复: 14782109 查看本文章

实例:

#include <iostream>
using namespace std;

class Box
{
public:
    Box(double len, double bre, double hei) {
        length = len;
        breadth = bre;
        height = hei;
    }
    Box() {
        length = 0;
        breadth = 0;
        height = 0;
    }

    double getVolume(void){
        return length * breadth * height;
    }
    Box operator+(const Box& b){ // 重载 + 运算符,用于把两个 Box 对象相加
        Box newbox;
        newbox.breadth = b.breadth + this->breadth;
        newbox.height = b.height + this->height;
        newbox.length = b.length + this->length;
        return newbox;
    }
private:
    double length;      // 长度
    double breadth;     // 宽度
    double height;      // 高度
};
// 程序的主函数
int main()
{
    Box Box1(6.0, 7.0, 5.0);// 声明 Box1,类型为 Box
    Box Box2(12.0, 13.0, 10.0);// 声明 Box2,类型为 Box
    Box Box3;                // 声明 Box3,类型为 Box
    double volume = 0.0;     // 把体积存储在该变量中

    // 把两个对象相加,得到 Box3
    Box3 = Box1 + Box2;
    // Box3 的体积
    volume = Box3.getVolume();
    cout << "Volume of Box3 : " << volume << endl; 

    return 0;
}

 模板二:成员初始化列表(推荐,性能高)

1、带默认参数的(相当于默认构造函数+构造函数)

    Box(double len = 0, double bre = 0, double hei = 0) :length(len),breadth(bre),height(hei){}

double len=0 意思是如果没有传参,len=0, 即length=0。相当于默认构造函数。

length(len) 意思是如果有传参len,length赋值为len。相当于构造函数。

类名::构造函数名([参数表])[:(成员初始化列表)]
{
    //构造函数体
}
class Box
{
public:
    Box(double len = 0, double bre = 0, double hei = 0) :length(len),breadth(bre),height(hei){}

private:
    double length;      // 长度
    double breadth;     // 宽度
    double height;      // 高度
};

2、不带默认参数的(相当于构造函数)

类名::构造函数名([参数表])[:(成员初始化列表)]
{
    //构造函数体
}
class Box
{
public:
    Box(double len, double bre, double hei) :length(len),breadth(bre),height(hei){}

private:
    double length;      // 长度
    double breadth;     // 宽度
    double height;      // 高度
};

猜你喜欢

转载自blog.csdn.net/icecreamTong/article/details/129334190