C++ class(二)

#include<iostream>

using namespace std;

//一、Constructor 
class Triangular 
{
public:
	Triangular();            //(1)constructor不应返回类型,亦不用返回任何值。可以被重载。
	Triangular(int len);
	Triangular(int len, int beg_pos);
	Triangular(int len = 1,int bp = 1);//(1)default constructor,为每个参数提供默认值
	Triangular(const Triangular &rhs);
private:
	int _length;
	int  _beg_pos;
	int _next;
	string _name; //(3)重定义Triangular,后添加
};

Triangular::Triangular()  //(1)default constructor,不需要任何参数
{
	_length = 1;
	_beg_pos = 1;
	_next = 0;
}

Triangular::Triangular(int len, int bp)
{
	_length = len > 0 ? len : 1;
	_beg_pos = bp > 0 ? bp : 1;
	_next = _beg_pos - 1;
}

//(2)Constructor 第二种初始化 -成员初始化列表
Triangular::Triangular(const Triangular &rhs) :_length(rhs._length)
, _beg_pos(rhs._beg_pos), _next(rhs._beg_pos - 1){};
//(3)为了将_name的初值传给string constructor,必须使用各成员列表初始化完成初始化
Triangular::Triangular(int len, int bp):_name("Triangular")
{
	_length = len > 0 ? len : 1;
	_beg_pos = bp > 0 ? bp : 1;
	_next = _beg_pos - 1;
}



//二、Destructor 
//Destructor绝不会有返回值,也没有任何参数。绝不可能被重载。
//何时需要定义destructor是最难部分之一。
class Matrix
{
public:
	Matrix(const Matrix &rhs);
	Matrix(int row, int col) :_row(row), _col(col)
	{
		_pmat = new double[row*col];
	}

	~Matrix()
	{
		delete[]_pmat;
	}

private:
	int _row;
	int _col;
	double* _pmat;

};

//三、成员逐一初始化,设计类时,要考虑是否在类之上进行“成员逐一初始化”,是否适当?
//若适当,则不需要copy constructor。若否定,则需要copy constructor
Matrix::Matrix(const Matrix &rhs) :_row(rhs._row), _col(rhs._col) //copy constructor
{
	int elem_cnt = _row*_col;
	_pmat= new double[elem_cnt];

	for (int i = 0; i < elem_cnt; i++)
	{
		_pmat[i] = rhs._pmat[i];
	}

}

int main()
{
	//everything will be ok
	Triangular tri1(8);
	Triangular tri2 = tri1; //此处,类成员会依次被复制
	//will be wrong
	//逐一初始化,则指针指向同一块内存,析构两次。是错误的。故需copy constructor
	Matrix mat(4, 4);   //调用构造函数
	{
		Matrix mat2 = mat;//进行逐一成员初始化
		                  //调用mat2析构函数
	}
	//调用mat1析构函数
	return  0;

}


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值