上机实验的一段调试代码

#include<iostream>
#include<cmath>
using namespace std;
class Rectangle
{
	private:
		double left,top;
		double right,bottom;
	public:
		Rectangle (double l=0,double t=0,double r=0,double b=0);
		Rectangle (Rectangle & t);
		~Rectangle(){}
		void Assign(double l,double t,double r,double b);//虽然这个assign函数和构造函数的功能看起来是一模一样的,但是在作用上面
		void Show();//有着本质的区别,前面一个是在创建对象的最开始的时候被自动调用的,而assign这个函数是后来我们对他进行其他值的
		double Area();//传入的时候来发挥作用的,性质和作用不一样,
		double Perimeter();
};
Rectangle::Rectangle (Rectangle & t)
{
    left=t.left;
    top=t.top;
    right=t.right;
    bottom=t.bottom;
    cout<<"has been used !"<<endl;
}
Rectangle::Rectangle (double l,double t,double r,double b)
{
	left=l,top=t;
	right=r,bottom=b;
}
void Rectangle::Assign(double l,double t,double r,double b)
{
	left=l,top=t;
	right=r,bottom=b;
}
void Rectangle::Show()
{
	cout<<"left-top point is ("<<left<<","<<top<<")"<<'\n';
	cout<<"right-bottom point is ("<<right<<","<<bottom<<")"<<'\n';
}
double Rectangle::Area()
{
	return fabs((right-left)*(bottom-top));
}
double Rectangle::Perimeter()
{
	return 2*(fabs(right-left)+fabs(bottom-top));
}
void fuckshow2(Rectangle  t)//复制构造函数如果是按照rectangle & t的方式来进行引用传递的话,并不会调用构造函数,输出的是输入的
{                            //以类为形参的相应结果,
                             //但是,即使不用引用来写,输出的结果还是输入的以类为形参的相应结果,所以就最终结果来看的话,结果还是相同的
                             //所以我们一般用的都是传递引用,这样会比传递值要快的多
    t.Show();
    cout<<endl;
}
Rectangle fuckshow3()
{
    Rectangle shiyan(666,666,999,999);//这里会创建一个临时的对象,不过这个fuckshow3的函数执行完过后就会被销毁,这是生存期的问题,将shiyan的值
	//复制到临时对象中,也就是复制构造函数的第一种情况
    return shiyan;
}
int main()
{
	//Rectangle rect;//有人说最上面的那个地方可以省去各种各样的形参值,不用这么来,用不用这么来的话,最关键的地方是看一个地方,那就是这里
	//rect.Show();//根据构造函数的定义来看的话,在创建的时候就会被调用,将实参值作为初始值,而这里没有给初始值,构造里面也没有默认值,所以错了
	//rect.Assign(100,200,300,400);//编译的时候就会报错,是语法错误
	//rect.Show();
	//cout<<"面积"<<rect.Area()<<'\t'<<"周长"<<rect.Perimeter()<<endl;
	Rectangle rect1(0,0,200,200);
	rect1.Show();
	//rect1.Assign(100,200,300,400);
	//rect1.Show();
	cout<<"面积"<<rect1.Area()<<'\t'<<"周长"<<rect1.Perimeter()<<endl;
	//Rectangle rect2=rect1;//复制构造函数第一种情况:用类的一个对象去初始化类的另外一个对象;
	//Rectangle rect2(rect1)//和上面的那个复制构造函数的情况实际上是一样的,只是形式的差别而已;
	//fuckshow2(rect);//复制构造函数第二种情况,当函数的形参是类的对象的时候,调用的时候形参和实参相结合;
	//cout<<"面积"<<rect2.Area()<<'\t'<<"周长"<<rect2.Perimeter()<<endl;
	Rectangle rect3;
	rect3=fuckshow3();//这个是复制构造函数的第三种情况,返回值是类的对象,函数执行完成返回类的对象的时候;
	rect3.Show();
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值