本文为博主原创文章,未经博主允许不得转载。
https://blog.csdn.net/lxy_2011/article/details/52672111
一、今日课题
1.拷贝构造函数
2.友元函数
二、实战演练
1.拷贝构造函数
拷贝构造函数,又称复制构造函数,是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构建及初始化。
其唯一的形参必须是引用,但并不限制为const,一般普遍的会加上const限制。此函数经常用在函数调用时用户定义类型的值传递及返回。拷贝构造函数要调用基类的拷贝构造函数和成员函数。如果可以的话,它将用常量方式调用,另外,也可以用非常量方式调用。
1)有何用?
就类对象而言,相同类型的类对象是通过拷贝构造函数来完成整个复制过程的
2)怎么用?
一个对象作为函数参数,以值传递的方式传入函数体;
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
a = b;
cout<<"creat: "<<a<<endl;
}
//拷贝构造
CExample(const CExample& C)
{
a = C.a;
cout<<"copy"<<endl;
}
//析构函数
~CExample()
{
cout<< "delete: "<<a<<endl;
}
void Show ()
{
cout<<a<<endl;
}
};
//全局函数,传入的是对象
void g_Fun(CExample C)
{
cout<<"test"<<endl;
}
int main()
{
CExample test(1);
//传入对象
g_Fun(test);
return 0;
}
一个对象作为函数返回值,以值传递的方式从函数返回;
class CExample
{
private:
int a;
public:
//构造函数
CExample(int b)
{
a = b;
}
//拷贝构造
CExample(const CExample& C)
{
a = C.a;
cout<<"copy"<<endl;
}
void Show ()
{
cout<<a<<endl;
}
};
//全局函数
CExample g_Fun()
{
CExample temp(0);
return temp;
}
int main()
{
g_Fun();
return 0;
}
一个对象用于给另外一个对象进行初始化(常称为赋值初始化);
CExample A(100);
CExample B = A;
// CExample B(A); 123
3)课外延伸:深浅拷贝
2.友元函数
友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。
1)有何用?
为了使其他类的成员函数直接访问该类的私有变量。
2)怎么用?
#include <iostream>
using namespace std;
class Box
{
double width;
public:
friend void PrintWidth(Box box);
void SetWidth(double wid);
};
void Box::SetWidth(double wid)
{
width = wid;
}
void PrintWidth(Box box)
{
cout << "Width of box:" << box.width << endl;
}
int main()
{
Box box;
box.SetWidth(10.0);
PrintWidth(box);
system("pause");
return 0;
}
3)前方高能
成员函数有this指针,而友元函数没有this指针;
友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。
原文:https://blog.csdn.net/lxy_2011/article/details/52672111
版权声明:本文为博主原创文章,转载请附上博文链接!