C++的六个默认函数

C++中,类有六个默认函数,分别是:

目录

1、构造函数

2.析构函数  

3.拷贝构造函数

4、赋值运算符重载函数

5、取地址操作符重载函数

6、const修饰的取地址符重载函数


1、构造函数

定义:在定义一个对象的同时,希望能给它的数据成员赋值——对象的初始化的成员函数,叫做构造函数。

在C++中,由于类的封装性,它不允许在类的非成员函数中直接访问类对象的私有和保护数据成员,不能在建立类的时候初始化。所以对于类对象数据成员的初始化工作就落到了类对象的成员函数身上,因为它们可以访问类对象的私有和保护成员。

#include<iostream>
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;
}

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值