每日一练---- 3.01oj总结(拷贝构造函数与友元函数)

Posted 赏一杯茶:

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一练---- 3.01oj总结(拷贝构造函数与友元函数)相关的知识,希望对你有一定的参考价值。

  1. 引用的知识点
  1. 引用初始化以后不能被改变,指针可以改变所指的对象(对)
  2. 引用传值,指针传地址(错)

对于问题1,看如下代码

int main() 
	int a = 10;
	int b = 20;
	int& ra = a;
	ra = b;


此时ra不会变成变量b的引用,仍是变量a的引用。故引用初始化后不能被改变。这里理解ra=b是将b的值赋值给ra和a

对于问题2,引用的底层汇编仍是传的变量的地址,故引用也是一种传址调用。

  1. 拷贝构造函数的知识点
  1. 拷贝构造函数的调用情况
    2.拷贝构造函数与赋值重载的区别

调用拷贝构造的函数有往往有三种情况
1.函数的形参非该类的引用
2.函数的返回值非该类的引用
3.用一个已有的对象去初始化该类的一个新对象

给出如下代码解释这三种情况:

class A 
	int _a;
public:
	A(int x) 
		_a = x;
	
	A(A& x) 
		cout << "调用拷贝构造" << endl;
		_a = x._a;
	
	A& operator=(A x) 
		cout << "调用赋值运算符" << endl;
		this->_a = x._a;
	
;
A F(A data) 
	return data;

int main() 
	A aa(1);
	A b(aa);
	F(bb);
	return 0;

总共调用了三次拷贝构造函数

关于拷贝构造函数与赋值重载的区别:
当用一个已初始化对象去初始化该类的一个新对象时,无论是以括号的形式传值或以赋值的形式,调用的都是拷贝构造函数,代码如下:

class A 
	int _a;
public:
	A(int x) 
		_a = x;
	
	A(A& x) 
		cout << "调用拷贝构造" << endl;
		_a = x._a;
	
	//A& operator=(A x) 
		//cout << "调用赋值运算符" << endl;
		//this->_a = x._a;
	/
;
int main() 
	A aa(1);
	A bb = aa;
	A cc(bb);
	return 0;


当我们修改代码

class A 
	int _a;
public:
	A(int x) 
		_a = x;
	
	A(A& x) 
		cout << "调用拷贝构造" << endl;
		_a = x._a;
	
	A& operator=(A& x) 
		cout << "调用赋值运算符" << endl;
		this->_a = x._a;
		return *this;
	
;
int main() 
	A aa(1);
	A bb(2);
	bb = aa;
	return 0;

会出现如下结果:

3. 友元函数重载运算符

  1. 因为友元函数非成员函数,故它不会默认传this指针,所以将操作符重载乘友元函数时,必须传给友元函数一个参数

像如下代码编译器就会报错处理


class student 
	int _num;
	string _name;
public:
	friend student& operator++() 
		this->_num++;
		return *this;
	
;
int main() 
	student s;
	return 0;;


修改过后即可

class student 
	int _num;
	string _name;
public:
	friend student& operator++(student& data) 
		data._num++;
		return data;
	
;
int main() 
	student s;
	return 0;;

以上是关于每日一练---- 3.01oj总结(拷贝构造函数与友元函数)的主要内容,如果未能解决你的问题,请参考以下文章

每日一练---- 3.02 3.03 3.04oj总结(类知识点)

每日一练---- 3.02 3.03 3.04oj总结(类知识点)

每日一练---- 3.02 3.03 3.04oj总结(类知识点)

每日一练---- 3.07 3.08 3.09oj总结(继承重载多态动态与静态绑定)

每日一练---- 3.07 3.08 3.09oj总结(继承重载多态动态与静态绑定)

每日一练----1.19 oj总结