目录
构造函数、默认构造函数的作用:
构造函数:传一些参数进来,用于给类的成员变量赋值。
默认构造函数:程序员给类的成员变量设定一个默认值,也是用于给类的成员变量赋值。如果没传参就用默认值给成员变量赋值。如果传了参就用传进来的参数给成员变量赋值。
模板一:构造函数用 类名(参数列表){},默认构造函数用 类名(){成员变量=默认值};
模板一:两个类名构造函数,一个传参,一个不传参。
#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();
说明:
- 构造函数的名字必须与类名相同,否则编译程序将把它当做一般的成员函数来处理。
- 构造函数没有返回值,在定义构造函数时,是不能说明它的类型的。
- 与普通的成员函数一样,构造函数的函数体可以写在类体内,也可写在类体外。
- 构造函数一般声明为共有成员,但它不需要也不能像其他成员函数那样被显式地调用,它是在定义对象的同时被自动调用,而且只执行一次。
- 构造函数可以不带参数。
实例:
#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; // 高度
};