1、什么是string类 (1)字符串是表示字符序列的类,string是表示字符串的字符串类 (2)标准的字符串提供了对此类对象的支持,其接口类似于标准字符容器的接口与常规容器的接口基本相同,但添加了专门用于操作单字节字符字符串的设计特性...,也就是专门用来操作string的常规操作 (3)string类是使用char作为它的字符类型 (4)string类是basic_string模版类的一个实例,它使用char来实例化basic_string...(6)在使用时要包头文件以及展开命名空间 2、string类的常用接口讲解 (1)string类的常见构造 函数名称 功能说明 string() 构造空的字符串 string(const char*...; cout << s1 << endl; //c_str测试 cout <<s1.c_str() << endl; //c_str就是将c++的格式转化为c语言的格式,这样字符串就可以用C...简单来说就是在用之前不开空间,在真正要修改和写入时才开辟空间,可以减少空间的浪费,它是在浅拷贝的基础上增加了引用计数的方式实现的 引用计数:用来记录资源使用者的个数,在构造时,将资源的计数给成1,每增加一个对象使用该资源
前言 本篇博客就好好了解一下C++中的类与对象相关知识,为C++今后学习奠定基础,由此可见非常重要,那就开始吧!!...个人主页:小张同学zkf ⏩ 文章专栏:C++ 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.类的定义 1.1类定义格式 • class为定义类的关键字,Stack为类的名字,{}中为类的主体...上⾯我们分析了对象中只存储成员变量,跟C语言中结构体一样,C++规定类实例化的对象也要符合内存对⻬的规则。 内存对⻬规则 • 第⼀个成员在与结构体偏移量为0的地址处。...那么这⾥就要看到C++给了 ⼀个隐含的this指针解决这⾥的问题 • 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针 。...this指针访问的,如Init函数中给_year赋值, this- >_year = year; • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显
这样就不会出现问题 四、类的访问限定符及封装 1、访问限定符 C++实现封装的方式是用类将对象属性与方法结合在一块,让对象更加完善,通过访问权限选择性的将其接口提供给外部的用户使用 开始时我们只使用public...} 的位置 (4)class的默认访问权限是private,struct为public 访问限定符只有在编译时有用,用于规范代码,在运行时没有区别 关于第(4)条,因为C++要兼容C语言,所以struct...我们看到初始化的类成员函数前加了_来和形参进行区分,这样会搞的很难受,在C++中引入this来解决这个问题,C++编译器给每个非静态的成员函数增加了一个隐藏的指针参数,让该指针指向当前对象,在函数体中所有...+实现栈 C++实现栈是学习C++类的一个很重要的步骤,他能够让我们看清C语言与C++之间的差异,这里有C语言实现的栈 C++中通过类可以将数据以及操作数据的方法进行完美结合,通过访问权限可以控制那些方法在类外可以被调用...,即封装,即C++中参数是编译器维护的,C语言要用户自己维护 class Stack { public://公共访问,但在类中可以访问private的内容,只是在类外不能直接访问 void Init(
---- 前言 C++在原C语言的基础上新增了面向对象(Object-Oriented)的思想,使其从一门关注解题方法与过程的语言转变为关注解题对象的语言,对于C++来说,万物皆可是对象,下面跟随我的脚步...,一起走进C++类和对象的世界 ---- 正文 下面就用一个经典的如何洗衣服的例子,来形象理解面向过程和面向对象的区别 面向过程 面向过程关注的是解决问题的步骤和过程 找到衣服 把洗衣机打开 将衣服和洗衣粉倒入其中...,使对象属性更加完善 注意: 访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 ️成员变量 在 class 中定义的普通变量,或者自定义类型变量,称为 成员变量,一般简称为 成员...指针解引用情况,是不会报错的,因为此时 this 指针为空指针 ---- 总结 以上就是类和对象(上)的全部内容了,我们简单了解面向过程和面向对象的区别,学习了类的各种特性,初步理解了C++的封装实现...,最后还知道了 this 指针的存在,体验到了类和对象的巧妙用法;在下一篇文章中,我们将会学习类中的各种默认成员函数,看看当初祖师爷在设计类时都出现了哪些问题,后续是如何解决问题的,以及类中更为有趣的成员函数
类成员函数的this指针 8.1 this指针的引出 8.2 this指针的特性 8.3 C和C++实现stack的对比 ---- 1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤...5. class的默认访问权限为private,struct为public(因为struct要兼容C) 注意: 访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 问: C++中struct...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有“成员变量”的操作,都是通过该指针去访问...看下面代码问题: // 1.下面程序编译运行结果是?...而且每个方法不需要传递Stack*的参数了,编译器编译之后该参数会自动还原,即C++中 Stack *参数是编译器维护的,C语言中需用用户自己维护
上⾯我们分析了对象中只存储成员变量,C++规定类实例化的对象也要符合内存对⻬的规则。 内存对⻬规则 第⼀个成员在与结构体偏移量为0的地址处。...那么这⾥就要看到C++给了⼀个隐含的this指针解决这⾥的问题 a 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。...,还隐藏传着实例化的地址, 当然C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理)。...通过下⾯两份代码对⽐,我们发现C++实现Stack形态上还是发⽣了挺多的变化,底层和逻辑上没啥变 化。...等着我们后⾯看STL 中的⽤适配器实现的Stack,⼤家再感受C++的魅⼒。 C实现Stack代码 C语言的这个栈没有封装函数,可以自己访问到结构体成员,进行修改。 这种情况很容易出现问题。
面向过程和面向对象 C 语言被认为是面向过程的编程语言,在面向过程的编程中,重点在于程序功能的实现,通过函数调用逐步解决问题。...C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。...this指针 QiuQiu类中Print函数和默认构造函数,这两个成员中没有关于对象的区分,可为什么在调用时,却能够区分q1和请q2。其实这是C++在类中给了一个隐含的this指针来解决这里的问题。...C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显示使⽤this指针。...虽然表面上失去解引用,但printf()这个成员函数在编译的时候地址就以及确定了,之后只需要找到对应的函数即可,实际上并没有解引用。
C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。...上⾯我们分析了对象中只存储成员变量,C++规定类实例化的对象也要符合内存对⻬的规则 。 内存对⻬规则 • 第⼀个成员在与结构体偏移量为0的地址处。...请看如下例子: 上⾯的程序运⾏后,我们看到没有成员变量的B和C类对象的⼤⼩是1,为什么没有成员变量还要给1个字节呢?因为如果⼀个字节都不给,怎么表⽰对象存在过呢!...那么这⾥就要看到C++给了 ⼀个隐含的this指针解决这⾥的问题。 • 编译器编译后,类的成员函数 默认都会在形参第⼀个位置 , 增加⼀个当前类类型的指针 ,叫做this指针。...this指针访问的,如Init函数中给_year赋值, this- >_year = year; • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显
文章目录 面向过程和面向对象初步认识 类的引入 类的访问限定符及封装 类的定义 类的实例化 类对象模型 this指针 面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤...,通过函数调用逐步解决问题。...("lisi", "男", 18); s.PrintStudentInfo(); return 0; } 但是在实际上,上面结构体的定义,在C++中更喜欢用class来代替 ---- 类的访问限定符及封装...注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 C++中struct和class的区别是什么❓ C++需要兼容C语言,所以C++中struct可以当成结构体去使用。...C++中通过引入this指针解决该问题,即:C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问
导入 类与对象是C++中的较为基础的一部分,也是后期学习的坚实根基。...• C++中struct也可以定义类,C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类(毕竟是C++的学习...类域 前面的作品中我们了解了局部域、全局域、命名空间域,而今天我们将来了解一下类域这一概念,C++中涉及的四种域基本上就这些了。...那么这⾥就要看到C++给了 ⼀个隐含的this指针解决这⾥的问题。 • 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this 指针。...指针访问的, 如Init函数中给_year赋值, this- >_year = year; • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显示使⽤this
封装 第一点 1.将数据和方法放到定义一起 c++类的成员函数 即方法 ,成员变量即数据 #include using namespace std; class stack { public...{ int val; struct listnode_C* prev; struct listnode_C* next; }; c++中,兼容c的struct定义结构体的用法,...但是同时struct也可以用来定义类 struct listnode_CPP//C++定义类,把listnode_CPP看作类名 { int val; listnode_CPP* prev...; listnode_CPP* next; listnode_CPP* createnode(int val);//定义成员函数 }; 3. c++中使用class和struct定义类的区别...类的实例化 用类类型创建对象的过程,成为类的实例化 类也可以看作是设计图,而类的实例化则使用图纸建造房子 1.成员变量的声明和定义 #include using namespace
类与对象 在C++中,类和对象的出现,是为了完善C语言的不足,在struct的基础上慢慢进步,慢慢完善,将其的功能发挥到最大,也方便使用!...C 语言是 面向过程 的, 关注 的是 过程 ,分析出求解问题的步骤,通过函数调用逐步解决问题。...的所有用法,还在其基础上增加了类和对象。...但是在C++中,就体现了封装的作用,是一种管理,就会将类的成员变量设置为私有private,就不会让你去访问,只是通过函数接口来访问,这样就不会出现问题。 ...C++ 中通过引入 this 指针解决该问题,即: C++ 编译器给每个 “ 非静态的成员函数 “ 增加了一个隐藏 的指针参数,让该指针指向当前对象 ( 函数运行时调用该函数的对象 ) ,在函数体中所有
C++是面向对象的,关注的是对象’的属性与功能。 在C语言中不能再结构体中包含函数,但是在C++中却可以。...,C++中兼容C语言中结构体用法,同时增加了类的用法 其实和C语言最大的区别就在于: C语言中struct只可以定义变量,C++中的struct既可以定义变量,也可以定义函数(实现方法)。...结论:一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。...C++编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数,让该指针指向当前对象(函数运行时调用该函数的对象),在函数体中所有成员变量的操作,都是通过该指针去访问。...只能在“成员函数”的内部使用。 3. this指针本质上其实是一个成员函数的形参,是对象调用成员函数时,将对象地址作为实参传递给this形参。所以对象中不存储this指针。
C++兼容C中struct的⽤法,同时struct升级成了类,明显的变化是 struct中可以定义函数,⼀般情况下我们还是推荐⽤class定义类。...2.类域影响的是编译的查找规则,下⾯程序中Init如果不指定类域Stack,那么编译器就把Init当成全 局函数,那么编译时,找不到array等成员的声明/定义在哪⾥,就会报错。...那么这⾥就要看到C++给了 ⼀个隐含的this指针解决这⾥的问题 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this 指针。...指针访问的,如Init函数中给_year赋值, this- >_year = year; C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显 ⽰使⽤this...栈 B.堆 C.静态区 D.常量区 E.对象⾥⾯ this指针的值(即调用对象的地址)在调用成员函数时作为隐式参数传递给函数,这个值可能会在函数调用期间存储在栈上(作为函数参数的一部分)。
C++中struct也可以定义类,C++兼容C中struct的用法,同时struct升级成了类,明显的变化是struct中可以定义函数,一般情况下我们还是推荐使用class定义类。...类域影响的是编译的查找规则,下面程序中Init如果不指定类域Stack,那么编译器就把Init当成全局函数,那么编译时,找不到_array等成员变量的声明或定义在哪里,就会报错。...C++给出了隐含的this指针来解决这个问题。 编译器编译后,类的成员函数默认都会在形参的第一个位置,增加一个当前类类型的指针,叫做this指针。...C++规定不能在实参和形参的位置显示写着this指针(编译时编译器会处理),但是可以在函数体内显示使用 this 指针。...C++中数据和函数都放在了类里面,通过访问限定符进行了限制,不能再随意通过对象进行修改数据,这是C++封装的一种体现,这个是最重要的变化,这里的封装的本质是一种更严格规范的管理,避免出现乱访问修改的问题
类和对象 1.什么是类 C++在C语言的基础上增加了面向对象编程,与之密切相关的概念就是类与对象。 类(class),是一种用户自定义的数据类型,可以封装数据和函数。...值得一提的是,在C++中,strcut也被升级成了类,也可以封装数据和函数。...C++给出的解决方案是,每个成员函数调用后,在编译器编译后,都会在函数形参的第一个位置,增添一个当前类型的隐式指针this,指代当前对象。...值得注意的是,C++规定了在函数实参形参位置不能显示地写this指针,编译器会帮我们处理,但在函数体内可以使用this指针(可以写,也可以不写,为了方便,一般都不写) 类的默认成员函数 默认成员函数:我们没有显式实现...而原因就是在C++中,传值调用会调用拷贝构造,那如果拷贝构造也是传值调用,那就无穷递归了(传值调用->拷贝构造->传值调用->拷贝构造......) 这里的参数不是类类型的引用,编译器就报错了。
前言:C++初阶系列,每一期博主都会使用简单朴素的语言将对应的知识分享给大家,争取让所有人都可以听懂,C++初阶系列会持续更新,上学期间将不定时更新,但总会更的 一、前置准备 1.1获得每月的天数...,可以去看看博主之前写的博客C++ 初阶 类和对象(中)-CSDN博客 C++初阶 类和对象(下)-CSDN博客 注意:构造函数构造的日期不一定合法,可以来个判断语句,若非法,中止程序 直接上代码 Date...main中依然存在,因此使用Date&类型的返回值可以令编译器的效率得到提高。...上-day,比方说2023-11-17-100,就直接先转换为2023-11-(-83),然后通过月份的进位来不断的令_day增加,直到_day大于0的时候循环停止并返回对应的内容即可。...++ 关于这方面更详细的讲解请看博主之前写的文章 C++初阶 类和对象(下)-CSDN博客 Date& operator++() //前置++,先++后使用 { (*this) += 1
• 类域影响的是编译的查找规则,下⾯程序中Init如果不指定类域Stack,那么编译器就把Init当成全 局函数,那么编译时,找不到array等成员的声明/定义在哪⾥,就会报错。...那么这⾥就要看到C++给了⼀个隐含的this指针解决这⾥的问题 • 编译器编译后,类的成员函数默认都会在形参第⼀个位置,增加⼀个当前类类型的指针,叫做this指针。...指针访问的,如Init函数中给_year赋值, this- >_year = year; • C++规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理),但是可以在函数体内显⽰使⽤this...通过下⾯两份代码对⽐,我们发现C++实现Stack形态上还是发⽣了挺多的变化,底层和逻辑上没啥变化。 ...这⾥的封装的本质是⼀种更严格规范的管理,避免出现乱访问修改的问题。当然封装不仅仅是这样的,我们后⾯还需要不断的去学习。
C++兼容C的,所以C中的结构体在C++中也能用,但是C++把结构体升级成了类,也就是说: 1.在C语言中 struct +名称,才表示一个自定义类型,如果想要直接用我们定义的名字,不加struct...C++中的类更喜欢用class关键字 二.类的定义 class className { // 类体:由成员函数和成员变量组成 }; // 一定要注意后面的分号 class为定义类的关键字,ClassName...注意:访问限定符只在编译时有用,当数据映射到内存后,没有任何访问限定符上的区别 四.类对象模型 A.类的存储方式 类的成员变量存储在类中 类的成员函数存储在一个公共代码区 B.类的大小计算 遵循结构体的内存对齐规则...只能在“成员函数”的内部使用; 3. this指针本质上是“成员函数”的形参,当对象调用成员函数时,将对象地址作为实参传递给 this形参,所以this指针存储在栈区; 所以对象中不存储...this指针; 4. this指针是“成员函数”第一个隐含的指针形参,一般情况由编译器通过ecx寄存器自动传 递,不需要用户传递; 两个问题 A. // 1.下面程序编译运行结果是?
flex,前身是lex,lex是1975年由Mike Lesk和当时尚在AT&T实习的Eric Schmidt共同完成的基于UNIX环境的词法分析器的生成工具。...这个lex很有名气,但是无奈效率太低加上有bug,让人用的很不爽。...named a.out which would be used for reading inputs and print outputs */ cc lex.yy.c -ll //参数-ll为mac上运行...,如果不好用(Linux上运行),试试参数-lfl ?...最后会出现lines、words、chars的个数。
领取专属 10元无门槛券
手把手带您无忧上云