
C++
天上掉下个我
下一站,高老庄
展开
-
C语言显示代码行号、所在函数名和所在文件名
C语言显示代码行号、所在函数名和所在文件名原创 2023-05-05 10:56:35 · 576 阅读 · 0 评论 -
C++中的this指针
目录this关键字this关键字this指针就是预先定义好的指向对象的指针。this指针变量记录每个对象的内存地址,然后通过间接访问运算符->访问该对象的成员。#include <iostream>using namespace std;class May{ char day_;public: char get()const { return day_; } void set(char x) { this->day_ = x; cout <<原创 2021-09-19 13:01:25 · 173 阅读 · 1 评论 -
C++中的析构函数
目录析构函数变量的生存期参考析构函数析构函数与构造函数功能相反,构造函数在对象被创建后调用,用于对对象的初始化,而析构函数在对象被销毁时调用,用于对对象内成员所占用的空间进行回收。析构函数名称与类名相同,前方有一个“~”,没有返回值,没有参数(这一点与构造函数不同)。一个类只有一个析构函数。如果定义类时没有编写析构函数,编译器会生成默认析构函数。如果程序员定义了一个析构函数,编译器不会再生成析构函数。为了确保对象所占用的空间被回收,析构函数在对象声明期结束时会被自动调用(析构函数调用时机的原因:无原创 2021-09-18 14:29:07 · 931 阅读 · 0 评论 -
C++中的复制构造函数
目录普通变量的复制复制构造函数复制构造函数的三种调用普通变量的复制有时我们会在定义一个变量的同时使用另一个变量来初始化它。int a_variable=12;int new_variable(a_variable);通过已有的同类型变量来初始化自身很有用。对自定义类型的对象是否可以通过一个存在的对象方便的复制呢?复制构造函数复制构造函数又叫做拷贝构造函数,它只有一个参数(既然需要复制,一个就够了,若传入两个相同对象则没有意义,若传入两个不同的对象,就没必要叫做复制构造函数了),参数类型为本原创 2021-09-17 21:49:47 · 2349 阅读 · 0 评论 -
C++中的构造函数
当我们在定义一个变量不给它指定一个初始值时,这个对象会被赋一个初始值。如图:构造函数属于成员函数比较特殊的一种(与其他成员函数不同,它不能被显式的调用,所以也没有必要为它设置返回值),它在对象的初始化时起作用(设计类时往往将初始化功能在构造函数中实现),当在局部空间或全局区创建自定义类型的对象时,构造函数会被自动调用(设计好初始化后,每当创建对象就会自动调用构造函数会使每一个对象都处于良好的随时可用的状态)。如图:初始化方法为给出形参列表如上图,在这里对类内成员赋初值(此时构造函数的函数体还未开始原创 2021-09-13 15:44:48 · 1007 阅读 · 0 评论 -
C++当中的注释
注释的写法C++ 支持单行注释和多行注释。注释中的所有字符会被 C++ 编译器忽略。单行注释://这里填写注释内容多行注释:/* 这里填写注释内容 ......*/注意事项注释应尽量使代码更易读,如a=b;//将b赋值给a这行代码本身明显比注释更加明了 ,添加的注释反而转移人的注意力,增加了阅读量,写这种注释是吃力不讨好的举动。而且这种注释和语句关联性更大,代码一旦更改,注释也要随之更新,我们往往这时会忘记这一步。c=b;//将b赋值给a这时,代码阅读者将会困惑到底是代码原创 2021-08-20 10:20:23 · 318 阅读 · 0 评论 -
C++中的常量成员函数
回顾一下this指针,在类X的非常量成员函数中,this指针的类型为X * const。这里的this指针是指向非常量X的常量指针。由于this指向的对象不是常量,因此它可以被修改。而在类X的常量成员函数中,this的类型为const X * const。这是一个指向常量X的常量指针。因为指向的是常量,所以不能被修改,这是常量成员函数和非常量成员函数之间的区别。class X{ public: X();buffer_(0),isComputed_(false){} void setBuffer原创 2021-08-10 17:39:09 · 339 阅读 · 0 评论 -
C++中动态内存分配new
在C++中,可以使用new来动态地在堆内存中分配对象。例如,用 new ClassName()语法实现从堆内存中分配ClassName对象,并将此对象的地址存储在ClassName *类型指针中。#include <memory>//得到auto_ptr的定义#include <string>//得到string的定义#include "Car.hpp"//得到Car的定义using namespace std;typedef auto_ptr<Car> Car原创 2021-08-04 15:04:52 · 1106 阅读 · 0 评论 -
C++中的局部对象
C++中可以创建用户自定义类型,并创建对应的对象#include "Car.hpp"//定义类Carvoid func(){ Car car;//创建一个对象car car.run()//调用一个成员函数 car.create(2021,8,"AM");//调用另一个成员函数}//对象被释放掉int main(){ func();}执行函数func()时,系统穿件了一个Car类的局部对象car,在这个函数右括号之前,都可以对局部对象进行访问。然后调用该对象的成员函数,编译器指导r原创 2021-08-04 14:20:43 · 359 阅读 · 0 评论 -
C++函数中的默认参数
C++允许函数具有默认参数。参数可以先行设置一个默认值,当调用函数没有提供应有的值时,默认参数可以自动提供。例如,当数值10应该被传递给func()函数,但调用程序没有提供,这时默认参数会提供一个数字1,会使调用代码简单清晰。void func(int x=1);//在函数声明中声明默认参数void func(int x){...}//在函数定义中不要出现重复的默认参数int main(){ func(10);//传递10给func() func();//传递1给func()}...原创 2021-08-04 11:57:35 · 143 阅读 · 0 评论 -
C++中的类型转换操作符
C++中有使用()的方式进行类型转换的方法,但能不用尽量不要用,它可能会破坏我们的整个项目,尽量使用以下四种类型转换操作符#const_castconst_cast操作符允许添加或移除表达式中的const或volatile修饰符:...原创 2021-08-03 22:03:27 · 206 阅读 · 0 评论 -
C++指针数组
#多级指针#指向指针的指针又被称为“多级指针”,如:int *ptr;//一个指针int **ptr2;//一个2级指针int ***ptr3;//一个3级指针#数组名#当我们声明一个数组后,数组的名字单独列出来往往被理解为指向数组首元素的指针,验证代码如下:#include <iostream>using namespace std;int main(){ int ary[3]={1,2,3}; cout<<&ary[0]<<endl;原创 2021-08-02 17:19:02 · 1388 阅读 · 0 评论 -
C++中常量指针与指向常量的指针
常量指针与指向常量的指针是完全不同的概念。int *ptr=new int;//一个指向int类型的指针const int a=1;const int *ptr1=&a;//一个指向const int的指针int b=1;int *const ptr2=&b;//一个指向int类型的const指针指针ptr1认为自己指向的是一个const int,即不能通过*ptr1来改变它所指向的对象的值const int a=1;const int *ptr1=&a;//一个指原创 2021-08-01 23:25:39 · 259 阅读 · 0 评论 -
C++中二维数组的引用参数传递
在一维数组参数传递时,数组的边界非常重要,如果希望函数接受含有特定数量元素的数组,可以使用引用形参,如:void func(int (&ary)[4])//此时函数只能接受大小为12的整型数组{}可以使用模板帮助我们判断数组的边界template <int n>void func1(int (&ary)[n]){}相应的,二维数组也可以表示如下:template <int n,int m>void func2(int (&ary)[n][原创 2021-08-01 15:58:52 · 5526 阅读 · 0 评论