app网站开发框架,什么项目适合新手创业,雅思培训,wordpress百度mlpC中#xff0c;类有六个默认函数#xff0c;分别是#xff1a;
目录
1、构造函数
2.析构函数
3.拷贝构造函数
4、赋值运算符重载函数
5、取地址操作符重载函数
6、const修饰的取地址符重载函数 1、构造函数
定义#xff1a;在定义一个对象的同时#xff0c;希望…C中类有六个默认函数分别是
目录
1、构造函数
2.析构函数
3.拷贝构造函数
4、赋值运算符重载函数
5、取地址操作符重载函数
6、const修饰的取地址符重载函数 1、构造函数
定义在定义一个对象的同时希望能给它的数据成员赋值——对象的初始化的成员函数叫做构造函数。
在C中由于类的封装性它不允许在类的非成员函数中直接访问类对象的私有和保护数据成员不能在建立类的时候初始化。所以对于类对象数据成员的初始化工作就落到了类对象的成员函数身上因为它们可以访问类对象的私有和保护成员。
#includeiostream
using nmespace std;class Clock
{
public:Clock()//构造函数{cout Clock() endl;hour 0;minute 0;second 0;}void Show(){cout hour : minute : second endl;}
private:int hour;int minute;int second;
};int main()
{Clock MyClock(8,30,30);MyClock.Show();return 0;
}
特点
1函数名与类名是相同的
2在建立对象时系统自动调用的函数。
3这个函数体是空的默认构造函数并不具备任何功能。
4可以重载。
5不能够手动调用。
6没有返回值
7可以在类中定义也可以在类外定义。
8如果用户为类定义了一个构造函数系统就不会生成任何默认的构造函数。
9作为类的成员函数构造函数可以直接访问类的所有数据成员可以是内联函数可以不带任何参数可以带有参数表以及默认参数值。
PS 构造函数与其他成员的区别
1构造函数必须和类名相同而一般成员函数不能和类名相同。
2构造函数主要功能在于类的对象创建时定义初始化的状态没有返回值不能用void修饰其他函数可以有返回值也可以没有但是必须用void予以说明。
3构造函数不能被直接调用一般成员函数在程序执行时被调用。
2.析构函数
~构造函数名
~Clock()
{cout ~Clock endl;
}
定义在特定对象使用结束后需要进行一些清理工作由特殊成员函数完成叫做析构函数。
特点
1没有任何参数不能被重载但可以是虚函数一个类只能有一个析构函数。
2没有返回值。
3析构函数一般由用户自己定义在对象消失时由系统自动调用。
4默认析构函数是空函数不做任何事。
3.拷贝构造函数
类名类型 变量名
Clock(Clock p)//拷贝构造函数
{cout copy Clock(Clock p) endl;hour p.hour;minute p.minute;second p.second;
}
定义用于在建立新对象时将已存在对象的数据成员值拷贝给新对象即用一个已存在的对象去初始化一个新建立的对象。
形式
类名类名 对象名)
{ ... } //函数体
特点
1拷贝构造函数其实是构造函数的重载
2拷贝构造函数的参数必须使用引用传参不能使用传值传参
3如果用户没有定义拷贝构造函数系统会默认缺省的拷贝构造函数缺省的拷贝构造函数会依次拷贝类成员进行初始化
PS
1默认的拷贝构造函数是浅拷贝。如果类成员变量有指针考虑实现深拷贝。
2形参一定要加引用。
3拷贝构造函数与构造函数有且只会调用一个。
4用一个常量初始化新建立的对象时调用构造函数不调用拷贝构造函数。
5当对象作为函数的返回值时需要调用拷贝构造函数此时C将从堆中动态建立一个临时对象将函数的返回的对象拷贝给该临时对象 并把该临时对象的地址存储在寄存器里从而由该临时对象完成函数返回值的传递。
6默认的拷贝构造函数是浅拷贝。
7在重新定义拷贝构造函数之后默认拷贝构造函数和默认构造函数就不存在了。 在重新定义构造函数后默认拷贝构造函数还在默认构造函数不存在。
8在对象进行赋值时拷贝构造函数不被调用。此时进行的是结构式的拷贝。
拷贝构造函数与对象赋值的区别拷贝构造函数是用一个存在的对象去构造一个不存在的对象对象赋值是当两个对象都存在用一个对象的值去覆盖一个对象的值。
浅拷贝和深拷贝
深拷贝实现原对象和新对象之间数据成员之间的拷贝而且可以为新的对象分配单独的内存资源。
浅拷贝直接将原对象的数据成员值依次复制给新对象中对应的数据成员并没有为新对象另外分配内存资源。
4、赋值运算符重载函数
运算符重载定义使同一个运算符作用与不同类型的数据时导致不同行为的一种机制。
形式返回值 operator 运算符参数列表
运算符函数的参数至少有一个必须是类的对象或者类的对象的引用。这种规定可以防止改变内置类型的函义。 5个不能重载的运算符
. (成员访问运算符) .* (成员指针访问运算符) :: (域运算符) sizeof (长度运算符) ?: (条件运算符
规则
1重载后运算符的优先级与结合性不会改变
2不能改变原运算符操作数的个数
3不能重载C中没有的运算符
4不能改变运算符的原有语义。
5、取地址操作符重载函数
Clock * operator()
{return this;
}
6、const修饰的取地址符重载函数
const Clock * operator() const
{return this;
}