构造函数基础讲解

#include<iostream>
using namespace std;
class box
{
public:
	box() {
		h = 1;
		w = 1;
		len = 1;
	}
	box(int a, int b, int c);
	int he();
private:
	int h, w, len;
};
box::box(int a, int b, int c) :h(a), w(b), len(c) {};

int box::he()
{
	int sum = h * w * len;
	return sum
;
}
int main() {
	box box1(10, 20, 56),box2;//box2不加()
	cout<<box1.he()<<endl;
	cout << box2.he() << endl;


}

不能在类中直接对数据成员直接初始化,因为类并不是一个实体,而是一种抽象类型,并不占用存储空间,所以就用到了构造函数。

构造函数:

1.必须与类名相同,且不具有任何类型,不返回任何值。

2.如果没写构造函数,系统也会默认给一个构造;

3.存在一种参数初始值表的方式,来初始化,例:

box::box(int a, int b, int c) :h(a), w(b), len(c) {};

其中h(a)等价于h=a;

注意!!如果数据成员也有数组,必须对数组在{}中赋值不可以用初始化表;

4.构造函数也可以无参数如box2。注意!! 构造无惨对象时不带();!!

5.构造函数可以重载(参数个数,参数类型);

6.无参构造函数要与默认参数的构造函数区分;两者不可以重载,存在二义性;

 

带默认参数的构造函数

#include<iostream>
using namespace std;
class box
{
public:
	box(int a , int b = 1, int c = 1); //: h(a), w(b), len(c) {}  可以这样
	//默认构造,都是从右向左开始,右边必须给默认,而不能int a=1 , int b = 1, int c 
	int he();
private:
	int h, w, len;
};
box::box(int a,int b,int c) {//x(int a=3,int b=4,int c=10)报错
	h = a;
	w = b;
	len = c;

}
int box::he()
{
	int sum = h * w * len;
	return sum
		;
}
int main() {
	box box1(10, 20, 56), box2(1), box3(10, 20);//box2不加()
	cout << box1.he() << endl;
	cout << box2.he() << endl;
	cout << box3.he() << endl;
}

结果:

11200
1
200

1.如果声明的时候给了默认参数值,定义时就算写一样的参数也会报错,

2.除非声明不给默认,定义时候再给默认;

3.默认构造,都是从右向左开始,右边必须给默认,而不能int a=1 , int b = 1, int c 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值