C++:
共6个函数
1、构造函数 2、析构函数 3、拷贝构造函数 4、赋值语句 5、取地址操作符的重载函数6、const修饰的取地址操作符的重载函数
调用拷贝构造情况:
对象初始化对象
传参是对象
返回类型是对象,要初始化一个临时空间(对象),调用拷贝构造
析构顺序与构造顺序相反
return Test(value);节省空间
Test fun(Test &x)引用不会拷贝构造
观察是否能构成重载,即参数列表是否相同,加一个const即可构成重载
Test(const Test &t)//不能去掉 &,否则会出现无限的递归调用,默认的拷贝构造函数带有const
{
m_data = t.m_data;
cout << “Copy Create Test Object:” << this << endl;
}
free§ 释放空间
p = NULL 释放指针
赋值语句方法
必须是在此值不等时,才能赋值,最后返回 *this
void fun()相当于 void fun(Test *const this)
void fun()const 相当于void fun(const Test *const this)
Test &operator=(const Test &t)
{
if(this != &t)
m_data = t.m_data;
return *this;
}
ifndef define endif 作用是什么
防止头文件被重复引用
<>编译器从标准库路径开始搜索,编译器从用户工作路径开始搜索
const作用是:
可以定义常量
const可以修饰函数的参数、返回值,甚至函数的定义体,被const修饰的东西
都受到强制保护,可以预防意外的变动,能提高程序的强壮性
常方法
常引用
extern C:
C++语言支持函数重载,C语言不支持重载,函数被C++编译后在库中的名字与C语言的不同,假设某个函数的原型为:void foo(int x,int y);
该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。
C++提供了C链接交换指定符号extern “C”来解决名字匹配问题。
在函数区域内,构造的对象在函数运行结束时,对象也会被随之销毁
开辟空间后要记得释放空间,并且释放指针(指针赋空)
为什么要加char *类型的返回值
为了实现链式表达式。
int length = strlen(strcpy(strDest,"hello world"));
赋值语句:
- List item
1.检查自赋值
2.释放原有的内存资源
3.分配新的内存资源,并复制内容
4.返回本对象的引用