
C++
文章平均质量分 86
FightFightFight
掘金:
https://juejin.cn/user/1459757308978104
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
[C++] C++中使用new和delete动态内存分配
在C语言中,我们经常使用char数组来表示一个字符串,如char name[50]表示申请50个字节的内存空间来存储姓名,然而,这种做法有很多缺陷,比如如果有些人姓名长度大于50,那么就要修改内存大小,这样造成了很大的内存浪费。因此,C语言的做法是通过指针来解决这个问题,比如:char * name;//声明char型指针//申请内存name = (char *)malloc(si...原创 2018-03-15 07:41:12 · 3785 阅读 · 0 评论 -
[C++] 继承、虚函数、纯虚函数、虚基类
1.继承1.1.继承语法格式要实现继承,遵循如下语法格式:class SubClass : [public/protected/private] SuperClass{ //... };其中SubClass称为派生类或子类,SuperClass称为基类或父类。冒号之后的访问修饰符的作用如下:1.public表示公有继承,基类的公有成员将成为派生类的共有成员,基类的私有部分...原创 2018-11-29 07:28:00 · 2074 阅读 · 0 评论 -
[C++] 拷贝构造函数和浅拷贝问题
1.拷贝构造函数当使用一个对象来初始化另一个同类对象时,编译器将自动生成一个构造函数,这个构造函数称为拷贝构造函数,其格式如下:CustomClass(const CustomClass & obj);在之前说过,创建类时,如果没有提供构造函数,那么编译器将会自动提供一个默认的构造函数。拷贝构造函数也是一样,如果没有提供拷贝构造函数,那么编译器将会提供一个默认的拷贝构造函数。1...原创 2018-11-26 23:29:57 · 618 阅读 · 0 评论 -
[C++] 继承和动态内存管理
在继承中,需要特别注意对动态内存的处理,当操作基类和派生类对象时,如果管理不当,就会造成如内存的二次释放、派生类内存未释放等问题。申请内存时需要在构造函数(尤其是拷贝构造函数)、赋值运算符中使用new来申请,在释放内存时则需要在析构函数中使用delete释放。下面就来看看继承中和如何合理地通过拷贝构造、赋值运算符、析构函数来管理动态内存。1.基类中未使用动态内存分配,派生类中未使用动态内存分配...原创 2018-11-30 16:10:58 · 370 阅读 · 0 评论 -
[C++] 友元函数和友元类
c++中对类的访问通过访问修饰符进行控制,类对象不能访问private和protected(子类中可以)修饰的变量和函数。有时候这种限制过于严格,因此,C++提供了另一种形式的访问权限——友元。1.友元函数通过让函数成为类的友元,可以赋予该函数与类的成员函数相同的访问权限。可以将友元理解为“类的好朋友”。简单来说,一个类的友元可以访问其私有属性和方法。1.2.创建友元函数Step1.创建...原创 2018-12-07 22:48:48 · 472 阅读 · 0 评论 -
[C++] 异常
1.抛出异常抛出一个异常,使用throw关键字,如:double divide(int i, int j) { if (j == 0) { throw "除数不能为0!"; } return i / j;}当执行到一个throw时,其后面的语句将不再执行。2.捕获异常如果程序中有异常抛出,则需要对异常进行捕获,通过try...catch语句,如:#include <...原创 2018-12-26 17:26:38 · 352 阅读 · 0 评论 -
[C++] 类型转换符static_cast、const_cast、dynamic_cast、reinterpret_cast
C++中为了避免松散的、无意义的类型转换,添加了四个类型转换操作符,以更严格地限制类型转换:static_cast,const_cast,reinterpret_cast,dynamic_cast,下面逐一看看他们的使用。static_cast用隐式转换、或者用户定义转换的组合在类型间的转换,可以使用static_cast,该运算符语法格式如下:static_cast<type-nam...原创 2018-12-23 12:12:23 · 603 阅读 · 0 评论 -
[C++] IO总结
C++中的IO库提供了用于输入输出的各种流,除此之外还提供了管理流和缓冲区等功能。IO库结构如下图所示:相同颜色的类位于同一个头文件中ios_base:表示流的基本特征;ios:继承于ios_base,提供了一个指向streambuf的指针;streambuf:为缓冲区提供了内存,并提供了用于操作缓冲区的方法;istream:继承于ios类,提供了输入方法;ostream:继承...原创 2018-12-31 23:28:58 · 988 阅读 · 0 评论 -
[C++]智能指针unique_ptr,shared_ptr,weak_ptr
C++中对于动态内存的使用非常严格,一次申请必须对应一次释放,否则将造成内存泄漏。这也要求程序员格外小心,比如如下示例:void getStr() { std::string * pstr = new std::string();//pstr为局部变量 *pstr = "Hello world"; .... return;}当该方法执行完毕后,局部变量pst...原创 2018-12-25 18:29:24 · 1522 阅读 · 0 评论 -
[C++] 函数总结
1.函数的定义定义函数三要素:函数名、参数列表、返回值;1.2.函数原型在函数使用前,必须对它进行声明,这个声明也称为函数原型。如:#include <iostream>//add()函数原型int add(const int& i,const int& j);int main(){ using namespace原创 2018-11-18 10:33:15 · 369 阅读 · 0 评论 -
[C++] 运算符重载
1.为何需要重载运算符自定义的类,不支持常用的操作符号,如果需要使用一些操作符,则该类必须对相应的操作符进行重载。如自定义类Person:#include <string>class Person{ private: int m_age; std::string m_name; public: Person(in...原创 2018-11-23 18:11:27 · 1260 阅读 · 0 评论 -
[C++]类总结
1.类基础1.1.类的声明一般的习惯是,类的声明和定义分别在头文件和源文件中进行,声明一个类时,使用关键字class,语法如下://Person.h#include <string>class Person { private: int age; std::string name; public: s...原创 2018-11-21 23:41:58 · 429 阅读 · 0 评论 -
[C++] C++转换函数的使用
1.构造函数转换和explicit关键字 在学习构造函数转换之前,先来复习下什么是自动类型转换:将一个标准类型的变量赋值给另一个标准类型的变量时,如果这两种类型兼容,则C++自动会将这个值转换为接收变量的值。 什么是构造函数转换呢?通俗来讲,构造函数转换就是用户通过构造函数提供的定义类之间的自动类型转换。它的定义如下:接收一个参数的构造函数可以实现这个参数类型和该类之间...原创 2018-03-11 16:07:14 · 4110 阅读 · 4 评论 -
[C++] C++基础(一) C++入门
1.第一个c++程序先用C++来写一个Helloworld的程序:#include <iostream> //预编译指令using namespace std; //编译指令int main() //函数头{ //函数体 cout << "Hello world" <...原创 2018-10-31 22:25:51 · 322 阅读 · 0 评论 -
[C++] C++基础(二) C++中的数据处理
1.基本数据类型整型整型数据包括以下几类char、short、int、long、long long五种,每种根据有无符号又可以分为两种,因此共有11种(加上wchar_t)。在c++中,每种类型的长度都不定,但提供了一个确保了最小长度的标准,如:short:至少16位长;int:至少和short一样;long:至少32位长;long long:至少64位长;无符号类型和有符号类...原创 2018-10-31 22:26:56 · 749 阅读 · 0 评论 -
[C++] C++基础(三) 指针
原创 2018-10-31 22:30:00 · 452 阅读 · 0 评论 -
[C++] const限定符
在定义变量时,如果希望该变量是一个只读的常量,则在变量前加const限定符即可。1.用于基本类型对于基本类型变量,定义只读常量有两种方式:#define预处理器编译指令和const限定符,前者是C中的语法,后者是C++中特有。#define和const的区别#define和#include一样,是一个预处理器编译指令,如:#define SIZE 21该指令告诉预处理器,在程序中查找...原创 2018-11-13 07:44:59 · 333 阅读 · 0 评论 -
[C++] cin.get(),cin.getline(),cin.clear()使用技巧
cin是用于输入的istream类的一个对象使用cin进行输入时,程序将输入视为一系列的字符,然后cin对象才负责将字符转换为其他类型。在输入数据时,可使用cin &amp;gt;&amp;gt; ch、cin.get(ch)、ch = cin.get()、cin.getline()等多种方式,看似简单,但其中的细节却非常重要,理解了这些cin的特点,那么cin在一些特殊场景下的用法也就一目了然了。如将cin用作...原创 2018-11-08 20:22:14 · 2662 阅读 · 0 评论 -
[C++] cctype头文件的使用
cctype是c/c++标准库中提供的用于操作字符的头文件。在cctype中,声明了一系列对于单个字符进行分类和转换的函数,cctype中的函数可以分为两大类:字符分类函数和字符转换函数,使用时通过#include预处理指令将引入该文件即可:#include &lt;cctype&gt;//或#include &lt;ctype.h&gt;//老式风格下面对cctype头文件中定义的函数...原创 2018-11-08 20:24:39 · 4222 阅读 · 0 评论 -
[C++]namespace和using关键字
1.什么是名称空间一个用于声明名称的区域。2.作用一个名称空间的名称不会与另一个名称空间中相同名称发射给你冲突,从而可以避免名称冲突。3.创建名称空间使用关键字namespace创建,如:namespace MySpace{ int age; double weight; ...}可以对名称空间进行嵌套:namespace MySpace{ in...原创 2018-11-21 11:21:51 · 456 阅读 · 0 评论 -
[C++] 为什么const char**形参不能接收char**类型的实参?
我们知道,const存在的意义之一,就是在对形参进行限定,从而达到防止修改实参的作用。使用const形参的理由有如下三条:原创 2019-03-22 00:45:06 · 2343 阅读 · 0 评论