首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么C++不重载时间函数,这样我们就不需要写NULL了?

C++不重载时间函数的原因是因为时间函数的实现涉及到操作系统底层和硬件相关的细节,而C++作为一种高级编程语言,更注重于提供通用的编程工具和语法,而不是直接操作底层的硬件和操作系统。

时间函数通常由操作系统提供,用于获取当前时间、日期和执行时间相关的操作。这些函数的实现需要考虑到不同操作系统的差异,以及硬件时钟的精度和稳定性等因素。因此,将时间函数的实现直接纳入C++标准库或语言本身并不是一个合适的选择。

相反,C++提供了一些标准库,如ctime和chrono,用于处理时间和日期相关的操作。这些库提供了一些函数和类,可以方便地进行时间的获取、格式化、计算和比较等操作。通过使用这些标准库,我们可以在C++中处理时间相关的任务,而无需重载时间函数或直接操作底层的时间函数。

关于NULL的提及,NULL是一个表示空指针的宏定义,用于表示指针不指向任何有效的内存地址。与时间函数无关。在C++中,我们可以使用nullptr关键字来表示空指针,它是C++11引入的新特性,更加安全和明确。

总结起来,C++不重载时间函数是因为时间函数的实现涉及到底层和硬件相关的细节,而C++更注重于提供通用的编程工具和语法。我们可以使用C++标准库中的ctime和chrono来处理时间相关的任务,而不需要重载时间函数。同时,NULL是一个表示空指针的宏定义,在C++中我们可以使用nullptr关键字来表示空指针。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

C嘎嘎入门篇:类和对象(2)

,此时我们就必须要写实参,还有一种就是不带参数或者全缺省的,此时不带参的我们写实参,而全缺省的我们可以不用写实参,当然也可以写,但一般我们都会写的,小编在之后讲完整时间类的时候就推荐各位去写。...,我们再看第七个特点,对于一些不需要去申请资源的类,我们就不要写析构函数,就比如小编之前写过的简易时间类,这个类就不需要去写析构函数,因为它的成员变量都没涉及到一些资源;当然,小编上面写的代码,对于只有自定义类型成员的类...,不然不如叫运算符构造得了~各位读者朋友记住这个特点就好,下面一个特点就解释小编讲述运算符重载函数参数的时候,为什么我们不可以重载三目操作符,因为C++规定我们不可以去重载,至于原因大家不必深究,...直到不能用就好,在以后我们不断的学习中可能就知道祖师爷为什么不让我们重载这个,之后的几个特点读者朋友看着就能理解,小编就不在多叙述(等小编讲述时间类的时候就会对其中几个多做说明),下面我们就先重载一个运算符...,增加代码的效率,此时我们是需要把赋值运算符重载作为类成员函数的,所以此时我们写一个形参即可,赋值操作涉及到了两个类的操作,所以我们直接传一个类类型对象的引用即可,这样可以减少拷贝构造函数的生成,之后的操作其实就和我们之前写的拷贝构造函数一样

7610

C++之类和对象

(在C语言中是习惯先定义变量再使用),但是一般我们见到的C++程序都是将成员函数写在成员变量的前面,这是为什么呢?...其实这也是可以预料到的,毕竟如果空类是零字节的话,实例化出来的对象就无法分辨。其实主要原因是,C++有默认的成员函数,就算我们写编译器也会自动生成,这个后面会提到。...可以看到,我们写编译器确实会有一个构造函数来初始化,不过这个初始化出来的数太随机值了,看起来就像乱码一样。这是为什么?...,对自定义类型调用其自身的赋值重载函数我们可以理解为:需要写析构函数的类就需要写赋值重载函数,不需要写析构函数的类就不要写赋值重载函数。...因为我们在类中定义的这个函数,所以第一个参数默认为隐藏的this指针,也就是左参数必须是类对象,因此这个运算符应该要这样使用: 可以看到这样使用就没有任何问题了,但是这样的可读性不高,重载这个运算符又显得没有意义

1.2K00
  • C++打怪升级(五)- 类和对象入门2

    C++的类中,便将一些类经常会用到的功能由编译器默认以函数的方式隐士的实现这样就简化了类的实现,一些功能我们可以不需要显式的写出来了,编译器帮我们完成了。...先说结论: 要看我们对类的具体需求,编译器默认生成的构造函数能够满足我们的需求就不要写,不满足时才需要手动写; 首先,并不是说有内置类型的变量就一定要写,自定义类型就一定不需要写; 内置类型...自定义类型 不需要写: 队列类用两个栈模拟实现时就不需要我们写构造函数,队列会调用栈自己的构造函数。...需要写: 队列类用两个栈模拟实现,但是我们对两个栈的大小给出了明确的大小,这样栈的构造函数初始化的大小就不符合我们期望的初始大小了,这种情况我们就需要手动写队列类的构造函数了。...与构造函数、析构函数、拷贝构造、赋值运算符重载不同,取地址重载我们基本不需要实现,除非有特殊需求,我们也不会在此花费多少时间

    78720

    C++】类的六大默认成员函数及其特性(万字详解)

    : 但是如果当我们显式自定义构造函数,系统就不会再生成那个无参的构造函数了,这时我们再在主函数调用无参的构造函数就会失败: class Date { public: //用户自定义的显式带参构造函数...,再去调用默认构造函数系统就不会生成了: 注意,在上述举例中,我们自定义的带参构造函数仅是为了证实 : 如果用户自定义构造函数,系统就不会再生成默认构造函数(这个系统生成的构造函数规定是无参的),如果用户自定义的是无参的构造函数...,那么系统同样不会生成构造函数,但是这时在主函数调用无参的构造函数是可以正常运行的,这是因为这时编译器调用的就是用户自定义的无参构造函数,但这样无法明显印证"用户自定义构造函数,系统就不会再生成无参的默认构造函数...这涉及一项C++的规定,即:按值传递会导致被调用函数使用调用程序中的值的拷贝 即,当我们函数传值调用时,实际上是将原变量拷贝一份给形参使用: 而对于C++中的自定义类型...,虽然仅仅只减少了一次拷贝构造及析构,但如果我们拷贝构造的对象是一个有几万个数据的动态栈或者其他结构时,小小一次拷贝构造节省的时间就非常可观: 但还有一点需要注意,不能够将函数内部创建的变量通过引用返回值返回给主函数

    16110

    C++】类和对象(第二篇)

    比如上面我们定义的那个Date类,如果要写它的构造函数就应该是这样的: 对象实例化时编译器自动调用对应的构造函数构造函数我们初始化对象就不用再手动初始化了,实例化一个对象时编译器会自动调用其对应的构造函数...这是不是就达到我们想要的效果。 但是要注意,调用无参构造函数的时候我们要写这样Date d1();即后面不要加括号。...为什么说只能有一个呢,因为我们调用这些构造函数是不是都不用传参啊,那这样如果同时存在多个的话,编译器就不知道到底该调哪个。 这个问题我们上面也有提到过的。 3....一运行发现我们的程序挂掉了。 为什么这样呢,刚才Date类也都是内置类型,为啥就没事呢?...所以为什么程序崩溃,就是我们这里对野指针进行free

    11010

    初始c++:入门基础(完结)

    函数重载 C++⽀持在同⼀作⽤域中出现同名函数,但是要求这些同名函数的形参不同,可以是参数个数不同或者 类型不同。这样C++函数调⽤就表现出了多态⾏为,使⽤更灵活。...&c=b; int &d=b; 引⽤⼀旦引⽤⼀个实体,再不能引⽤其他实体 我们上面吧b引用给a 那么a就不能引用其他值了 3引⽤的使⽤ •引⽤在实践中主要是于引⽤传参和引⽤做返回值中减少拷...例如下面的代码我们要写swap函数我们用指针也能完成,但是我们把实参写成引用的形式,看似形参能改变实参,其实是其引用的值改变实参的。而且这样跟指针相比少开辟空间,减少了消耗。...,编译时C++编译器会在调⽤的地⽅展开内联函数这样调⽤内联 函数就不需要建⽴栈帧,就可以提⾼效率。...但是如果函数语句过多,比如是个循环或者是递归语句,我们每次展开的空间过大,编译器会自动展开,开辟函数栈帧,然后调用。

    5710

    详细c++必修:类和对象(二)

    (返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此) 对象实例化时系统会⾃动调⽤对应的构造函数。 构造函数可以重载。...我们在主函数中调用。其中Stack类中有指针指向的空间,所以必须写析构,但是MyQueue类中却不用写。 这是为什么? 因为编译器默认⽣成MyQueue的析构函数调⽤Stack的析构。..._capacity; } 此时再调试我们就指向不同空间。 拷⻉构造的特点: 拷⻉构造函数是构造函数的⼀个重载。...像Stack这样的类,虽然也都是内置类型,但 是_a指向资源,编译器⾃动⽣成的拷⻉构造完成的值拷⻉/浅拷⻉不符合我们的需求,所以需要 我们⾃⼰实现深拷⻉(对指向的资源也进⾏拷⻉)。...这⾥还有⼀个⼩技巧,如果⼀个类显⽰实现析构并释放资源,那么他就 需要显⽰写拷⻉构造,否则就不需要。

    12910

    C++运算符重载详解(日期类实操)

    前言:为什么要实现运算符重载?...看返回值如果是*this,就用引用返回(出了函数作用域,不会销毁); 返回值如果是在函数体内创建的临时变量,就不用引用返回(出了作用域,临时变量会销毁)。 赋值运算符重载: 1....operator= 我们写,编译器会生成默认的operator=,跟拷贝构造的行为类似,内置类型值拷贝,自定义类型调用他的赋值。...2、前置++后置++的重载区别  // 前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载  // C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递...如果我们使用值传送来传递一个流给函数,那么在函数里要生成一个该流的临时变量,生成临时变量的时候,就要调用对应的拷贝构造函数,并且这个拷贝构造函数必须是以一个值传送的流作为参数的——但是流就是没有这样的拷贝构造函数

    5110

    C++初阶】类和对象修炼中

    一.构造函数 首先给大家聊聊为什么C++中要设计出构造函数,构造函数完成的是对象的初始化Init(),因为在实际代码编写过程中,我们往往会忘记写对象的初始化函数Init(),甚至还会出现写了忘记调用的情形...所以C++中就出现构造函数,如果你没写的话,编译器就帮我们写好初始化函数,并且在对象创建的时候自动调用。...默认构造函数并不仅仅指的是我们写,编译器默认生成的; 编译器默认生成的只是三种构造函数重载的默认构造函数的一种,也就是下图中我们显式写出来的无参构造函数....: 这里我给大家演示的是将函数定义成了全局的,这样第一个参数就不是this指针,但是C++编译器同样支持把调用函数的方式处理成我们从小到大都熟悉的形式:d1==d2,而非 operator==(d1,d2...,而非全局的函数(也没法定义成全局的,因为成员变量几乎都是私有访问的) 有运算符重载得铺垫,我们就可以给大家讲什么是赋值运算符重载.

    52850

    3.类和对象(中)

    一个类,我们写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重要,我们稍微了解一下即可。...(返回值啥都不需要给,也不需要写void,不要纠结,C++规定如此) 3. 对象实例化时系统会自动调用对应的构造函数。 4. 构造函数可以重载。可以重载的意思是什么呢?...那它为什么还需要析构函数呢?它里面有一个指针指向堆上的空间,如果我们不去写析构函数或者说像以前一样不去调用Destroy,函数调用结束以后它就把这个空间还给操作系统。那这个空间销毁了吗?...没有,因为我们malloc这块空间需要我们手动释放。释放就没有内存销毁,就会有内存泄漏。 栈是必须要写析构的,写就内存泄漏了。...这里还有⼀个小技巧,如果⼀个类显示实现析构并释放资源,那么他就 需要显示写拷贝构造,否则就不需要。 6.

    7210

    C++修炼之路】3. 类和对象(中)

    默认成员函数:又称特殊成员函数,用户没有显式实现,编译器会生成的成员函数称为默认成员函数。即:我们写,编译器就会自己生成一个;我们自己写了,编译器就不会生成。...同时也对应上面的条款:默认构造函数只能有一个 2.3 构造函数实现栈Stack的初始化 对于栈来说,初始化是必要的,但是我们在创建栈的时候有可能忘记调用其初始化,因此在C++中,我们可以通过构造函数对其自动的初始化...虽然说是可以的,但在这里我还是想记录一下我当时思考的过程:在了解拷贝会发生死递归之后,但是又看见指针传就不会死递归,我就产生了一个这样的疑惑:传参是拷贝值产生死递归,用指针也是传地址,这个地址也算是参数吗...然后拷贝这个地址,这样也会发生死递归吗,为什么还可以呢?...我们知道对于默认的6个成员函数都有一个共性,即当我们这样函数时系统会默认生成一个这样函数,前面的构造、拷贝、拷贝构造都已经展示过,下面将我们的赋值运算符重载函数去掉,让系统自动生成一个赋值运算符重载函数再运行会是什么样的结果

    50900

    C++】类和对象(中):类的默认成员函数,构造函数、析构函数、拷贝构造函数、运算符重载

    (什么都不给,连void都不需要写) 3.对象实例化时系统会自动调用对应的构造函数。 4.构造函数可以重载。 以时间类Date为例。...,所以全缺省构造函数和无参构造函数不能同时存在,在之前介绍函数重载的时候就说过,不清楚的去看看【C++C++入门知识详解(下)-CSDN博客 用全缺省构造函数是最好的,因为我们可以传参,都传参,传一部分参...这里解释一下为什么拷贝构造第一个参数传参方式必须是引用。 首先我们要知道,C++规定传值传参要调用拷贝构造,没有为什么,就是规定。比如说下面这个f1函数。...在C语言中实参传给形参就是直接拷贝过去,不会调用一个函数,在C++中传值传参要调用拷贝函数我们在直接调用拷贝构造函数时,因为是引用传参,就不会形成新的拷贝函数。...小技巧:如果一个类显示实现析构并释放资源,那么他就需要显示实现写赋值运算符重载,否则就不需要。

    8810

    C++】类和对象 (中篇)

    ,不要在对象后面带括号,这样使得编译器分不清这是在实例化对象还是函数声明; ---- 2、特性分析 – 自动生成 在构造函数的第5点特性中我们提到:如果类中没有显式定义构造函数,则C++编译器会自动生成一个无参的默认构造函数...,直接使用编译器自动生成的构造函数即可;(虽然自动生成的构造函数对内置类型处理,但本来Date类就不需要我们做任何处理) Stack: class Stack { public: Stack(int...,可以理解为需要写析构函数就需要写拷贝构造,不需要写析构函数就不要写拷贝构造; 拷贝构造的经典使用场景: 使用已存在对象创建新对象; 函数参数类型为类类型对象; 函数返回值类型为类类型对象; --...,但对于有资源申请,需要进行深拷贝的对象来说就会发生不可控的事情,具体案例我们在第四点特性中讲解; 在 《Effective C++》中对赋值重载函数自我赋值的解释是这样的: if(this == &...,对自定义类型调用其自身的赋值重载函数我们可以理解为:需要写析构函数的类就需要写赋值重载函数,不需要写析构函数的类就不要写赋值重载函数; ---- 七、取地址及 const 取地址重载 1、const

    67200

    类和对象之六大基础函数

    (你写了编辑器就不会生成,你写编辑器就会自动生成,是否写构造函数,要考虑编辑器自动生成的构造函数是否可满足需求,在上述日期类中,自动生成的构造函数可不满足我们的需求,原因看下文,所以我们要自己写) class...对,没错,不管了0.0,即随机值(我猜测是编辑器认为它是内置的,大家都门清,就不管你),这也是为啥上文的日期类对象要写构造函数的原因,一个日期怎么能随机呢?)...如果类中没有申请资源时,析构函数可以写,直接使用编译器生成的默认析构函数,比如 Date类;有资源申请时,一定要写,否则会造成资源泄漏,比如Stack类  5.赋值运算符重载(自定义运算符)...5.1 运算符重载 C++在扩展类的功能后,又来一个新问题,在我们完成类的定义后,我们定义的类作为单独的一个类对象除了能用于各种需求的数据存储,但是不同对象之间却没有太多的交流。...,使用编译器生成的默认取地址的重载即可,只有特殊情况,才重载,比如想让别人获取到指定的内容(不过这样就无法取的类对象的地址);

    56520

    C++初阶 入门(2)

    c++中,定义函数的时候可以让最右边的连续若干个参数有缺省值,在调用函数的时候,如果写相应位置的参数,则调用的参数就为缺省值,如此便构成了缺省函数 1.2为什么要有缺省函数 有的小伙伴可能会觉得...但其实在实际编写代码的过程中,我们有些时候会频繁地调用某个函数,而这个函数的其他参数是固定值,在c中遇到这种情况,便只能老实写参数,即使这几个参数的数值你已经写了无数次,但你依然得去写它,而在c++中...,你使用缺省函数就可以避免这一情况,你完全可以将一些不会变的参数或不常变的参数进行缺省,这样子不仅可以节约大量的时间,还可以大大提升代码的可读性。...而返回值是不作为函数重载的考虑范围的,也就是说,两个函数即使参数类型和个数都相同,它们的返回值不同也是构成函数重载的。...引用在初始化时引用一个实体后,就不能再引用其他实体,而指针可以在任何时候指向任何 一个同类型实体 4. 没有NULL引用,但有NULL指针 5.

    15910

    类与对象中篇

    6.如果类中没有申请资源时,析构函数可以写,直接使用编译器生成的默认析构函数,比如:Date类,有资源申请时,一定要写否则会造成资源泄漏,比如Stack类。...5.赋值运算符重载 运算符重载C++为了使自定义类型也能使用运算符同时增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,也具有其返回值类型,函数名字以及参数列表,其返回值类型和参数列表与普通的函数类似...operator==(d1,d2);函数放在类中d1.operator==(d2) //也可以显示调用 但一般这样 //operator==(d1, d2);//d1.operator==(d2)...,就和编译器在类中生成的默认赋值运算符重载冲突,故赋值运算符重载只能是类的成员函数。...// C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递,编译器自动传递 // 注意:后置++是先使用后+1,因此需要返回+1之前的旧值,故在实现时需要先将this保存一份

    52430

    C++】类和对象(中)(万字详解)

    对,我们多多少少会忘记,所以在C++类和对象中呢,就出现这样函数:构造函数和析构函数 ---- 一、类的六个默认成员函数 默认成员函数:用户没有显式实现,编译器会生成的成员函数称为默认成员函数。...(重载(点击链接有详细解释),函数名相同,参数不同就构成重载为什么要构成重载呢?...他们都是默认成员函数,自己写,编译器就会默认生成。关键在于,编译器默认提供的,能不能符合我们的需求! 那么我们之前总结过,拷贝构造,当要调用析构函数时,就需要我们自己去写,赋值重载也是一样的。...); ---- 那么有时候我们也会遇到这样的情况:cout<<d1<<d2; 链式访问,这就和之前的赋值重载很一样,需要返回值,不同的是,<<的链式访问是从左到右的。...2.取地址重载 六大类默认成员函数就是:自己写,编译器会给出。 当然,取地址重载例外,所以在大多数的时候,我们使用取地址都不需要自己写,除非一种情况!!

    45230

    C++修行之道】类和对象(五)日期类的实现、const成员、取地址及const和取地址操作符重载

    C++中,对象的复制可能是一个昂贵的操作。 链式操作:通过返回引用,可以支持链式操作。...例如,可以这样写代码:--date = anotherDate; 注意:this指向的对象函数结束后不会销毁,故以引用方式返回提高效率 后置运算符的语义是“先返回,再操作”。...前置++和后置++都是一元运算符,为了让前置++与后置++形成能正确重载 C++规定:后置++重载时多增加一个int类型的参数,但调用函数时该参数不用传递,编译器自动传递。...class A { public: // 我们不实现,编译器会自己实现,我们实现编译器就不会自己实现 // 一般不需要我们自己实现 // 除非不想让别人取到这个类型对象的真实地址 A* operator...,使用编译器生成的默认取地址的重载即可,只有特殊情况,才重载,比如想让别人获取到指定的内容!

    9710

    C++C++入门基础

    我们可以直接将命名空间在全局展开,这样就不用每次都加个作用域限定符去访问了!!...8.1 函数重载的概念 在c语言中,不支持函数同名,即每个函数名都只能被定义一次,这就在某些情况会造成困扰,比如Add函数我们设置的时候想让他计算int类型,但是如果我们想再设置一个这样函数计算...double类型,就不能直接用Add这个名字,而是还得写成Addd,如果想计算float,得写成Addf,这其实是不利于理解的,我们的祖师爷本贾尼博士为了解决这种情况,让c++支持函数重载的功能。...+支持函数重载的原理--名字修饰(name Mangling) 为什么c++支持函数重载,而c不支持呢?...通过这里就理解了C语言没办法支持重载,因为同名函数没办法区分。而C++是通过函数修 饰规则来区分,只要参数不同,修饰出来的名字就不一样,就支持重载

    20810
    领券