一、对象赋值语句
这个比较简单,就直接上代码啦
#include<iostream>
using namespace std;
class Myclass{
private:
int a,b;
public:
void set(int i,int j){
a=i;
b=j;
}
void show(){
cout<<a<<" "<<b<<endl;
}
};
int main(){
Myclass o1,o2;
o1.set(1,2);
o2=o1;
o1.show();
o2.show();
return 0;
}
测试用例:
二、拷贝构造函数
拷贝构造函数是一种特殊的构造函数,其形参是本类对象的引用。
拷贝构造函数的作用是,在建立一个新对象时,使用一个已经存在的对象去初始化这个新对象。
2.1、自定义拷贝构造函数
类名::类名(const 类名& 对象名){//函数体}
例:类名 对象2(对象1);(代入法)
类名 对象3=对象1;(赋值法)(底层依然调用拷贝构造函数)
class Point {
private:
int x, y;
public:
Point(int a,int b) {
x = a;
y = b;
}
Point(const Point & p) {
x = 2 * p.x;
y = 2 * p.y;
}
void show() {
cout << x << " " << y << endl;
}
};
int main() {
Point p1(20,30);
Point p2(p1);
Point p3 = p1;
p1.show();
p2.show();
p3.show();
return 0;
}
测试用例:
2.2、默认拷贝构造函数
class Point {
private:
int x, y;
public:
Point(int a,int b) {
x = a;
y = b;
}
void show() {
cout << x << " " << y << endl;
}
};
int main() {
Point p1(20,30);
Point p2(p1);
Point p3 = p1;
p1.show();
p2.show();
p3.show();
return 0;
}
测试用例:
2.3、调用拷贝构造函数的3种情况
(1)当用类的一个对象去初始化该类的另一个对象时,会调用拷贝构造函数
Point p2(p1);
Point p3=p1;
(2)当函数的形参是类的对象,在调用函数进行形参和实参结合时,会调用拷贝构造函数
void fun(Point p){
p.print();
}
int main(){
Point p1(10,20);
fun(p1);
return 0;
}
(3)当函数的返回值是类的对象,在函数调用完毕将返回值(对象)带回函数调用处时,会调用拷贝构造函数,将此对象复制给一个临时对象并传到该函数的调用处。
Point fun(){
Point p1(10,20);
return p1;
}
int main(){
Point p2;
p2=fun();
return 0;
}