C++ Primer读书笔记
文章平均质量分 73
这是Jungle在阅读和实践《C++Primer Plus》的过程中记录的一些笔记,与君共勉!
冯Jungle
C++开发者
展开
-
C++11—关于引用Reference
C++11推出了右值和右值引用。那么什么是引用,什么是左值引用和右值引用呢?原创 2022-08-13 16:50:57 · 948 阅读 · 1 评论 -
浅析C++类的内存布局
之前Jungle写过一篇文章《探究C++:虚函数表究竟怎么回事?》,主要xiang原创 2021-06-11 23:24:55 · 812 阅读 · 4 评论 -
探究C++:虚函数表究竟怎么回事?
封装,继承和多态,是C++的三大特性。提到多态,就会提到虚函数virtual;提到虚函数,不得不说虚函数表。我们知道,在一个类Class中,如果有定义虚函数,那么这个类对象所占用的存储空间中,会保存一个指向虚函数表的指针,结果是这个类的大小会增加4,即一个指针的大小。那么这个指针存储在类的什么地方?虚函数表里是如何存放各个虚函数的?在具有继承关系的不同类中,虚函数表中的存储有什么变化?本文Jungle将对此做个测试。1.有无虚函数,对类大小的影响前文已经说到,如果一个类定义了虚函数,sizeof原创 2020-09-12 21:55:25 · 1950 阅读 · 0 评论 -
C++ cin,cin.get(),cin.getline()用法说明
cin是C++中常用的输入,是把输入保存到缓冲区,然后读取缓冲区里的字符。本节Jungle对cin、cin.get()、cin.getline()的用法做一个简单的说明。1.cincin遇到[enter]、[tab]、[space]将会结束,遇到第一个结束条件时,比如[enter],输入再多的[enter]都将会被舍弃。如int _tmain(int argc, _TCHAR* arg...原创 2018-07-06 23:55:42 · 483 阅读 · 0 评论 -
C++构造函数与析构函数中调用虚函数
在基类和派生类的构造函数和析构函数中调用虚函数,会不会体现出多态性呢?Jungle做了以下测试:首先定义了基类Base和虚函数fun,并在构造函数和析构函数中调用了fun();然后定义了派生类Derived1继承了Base,并重写了虚函数fun(),并在Derived的构造函数和析构函数中调用了fun();接下里测试。class Base {public: Base(...原创 2018-08-19 11:42:18 · 3043 阅读 · 0 评论 -
C++函数重载、重写与重定义
重载:同一个类中(不一定是在类中),定义了多个同名的函数,这些函数的参数列表(参数个数,参数类类型)不完全相同,这是函数的重载。函数的返回值类型不能作为是否是重载的判断依据,因为返回值类型可以舍弃、可以自动转换等。重写:类的继承里,子类里含有与父类里同名的虚函数,函数名、函数返回值类型和参数列表必须相同,权限可以不同。如果返回值类型或者参数列表不同,这是子类方法的重定义,即使加了virtual...原创 2018-08-14 11:21:54 · 2085 阅读 · 0 评论 -
C++ STL之vector常用方法
模板类vector是一种动态数组,可在运行阶段设置vector对象的长度,可在末尾附加数据,还可在中间插入数据,删除指定位置数据等。vector是一种常用的STL模板类。这里Jungle简单介绍一下vector的常用的方法。1.声明与初始化///类型为int的数组,名称为a0,有0个元素vector<int> a0;///类型为int的数组,名称为a1,有5个元素,默认为0...原创 2018-07-05 22:19:52 · 337 阅读 · 0 评论 -
C++泛型编程:函数模板
1.函数模板函数模板是通用的函数描述,使用泛型来定义函数,其中的泛型可以用具体的类型(如int,double)等替换。通过把函数类型作为参数传递给模板,可以使编译器生成该类型的函数。1.1常规函数模板///template:关键字;<>尖括号内,用typename或者class代替具体的类型;T是类型名字template <typename T> T ge...原创 2018-07-04 23:03:22 · 532 阅读 · 0 评论 -
C++ char*、char[]与string类转换
int _tmain(int argc, _TCHAR* argv[]){ //1. char*转为string char *s = "Jungle"; string str = s; //2. char[]转为string char s2[20] = "Feng Jungle"; string str2 = s2; //3. s...原创 2018-07-05 00:20:56 · 2276 阅读 · 0 评论 -
C++ 类继承知识点笔记
这两天在看《C++ Primer Plus》的类继承这一节,整理了以下的知识点:1.派生类不能直接访问基类的私有成员,必须通过基类的公有方法访问。(保护方法不能访问)2.派生类构造函数必须使用基类构造函数,初始化基类私有成员必须使用成员初始化列表。比如定义一个基类A:class A{public: A(){} A(int iage,int ilen) ...原创 2018-05-12 00:56:11 · 319 阅读 · 0 评论 -
共用体union和枚举enum
1.共用体union共用体能够存储不同的数据类型,但是同时只能存储其中一种类型。共用体的长度是最大成员的长度。(节省空间)union one4call{ int int_val; long long_val; double double_val;};//可以用one4call存储int、long或double,条件是在不同的时间进行://示例one4c...原创 2016-03-22 11:12:16 · 1459 阅读 · 0 评论 -
C++ explicit关键字
头文件:#include<iostream>usingnamespacestd;classStudent{private:intnum;chargrade;public: // 1.不带参数 Student(); // 2.带一个默认参数 ...原创 2016-03-17 22:19:30 · 402 阅读 · 0 评论 -
C++中const小结
一、const1.指针和const可以用两种方式将const关键字用于指针:(1)让指针指向一个常量对象,可以防止使用该指针修改所指向对象的值 int age = 39;const int * pt = &age;//声明一个指向常量的指针ptpt指向一个const int(这里是39),因此不能使用pt来修改age:*pt = *pt+1;/...原创 2016-03-22 22:19:44 · 481 阅读 · 0 评论 -
数组与函数
1.关于数组不能将一个数组赋值给另一个数组 int cards[4]={0,1,2,3}; int hand[4]; hand = cards;//wrong; hand[4] = {2,3,4,5};// wrong,数组只有在定义时才能初始化,此后不能,但是可以用下标分别给数组中的元素赋值注:但是结构体struct可以...原创 2016-03-23 20:17:46 · 329 阅读 · 0 评论 -
void和void指针
1.void (1)函数返回类型:无返回值eg. void show() { cout }如果一个函数没有定义返回类型,将默认为返回类型为整型(int)eg. show() { return 10; //legal原创 2016-04-23 15:20:34 · 475 阅读 · 0 评论 -
C++基本数据类型
内置的C++类型分为两组:基本类型和符合类型。符合类型包括数组、字符串、指针、结构。而基本类型则包括 整型和浮点型。 1. 整型1.1. 整型类型整型分为char, short, int, long, long long,每种类型都有符号和无符号类型,即10种。加上bool类型,一共11种。每种类型的最小长度: char:8位(bit,8bit=1Byte) short:1...原创 2018-04-21 11:14:51 · 4891 阅读 · 2 评论 -
C++字符串
字符串是连续存储在内存中连续字节中的一系列字符。C++字符串分为两种:C-Style字符串和string类字符串。1. C-Style字符串即char数组,以空字符‘\0’结尾。1.1.初始化两种方式: ///方式1 char str[] = {'f','e','n','g','\0'}; ///right,末位加上空字符 char str2[...原创 2018-04-21 14:21:47 · 170 阅读 · 0 评论 -
C++ 三种管理数据内存方式
1.自动存储在函数内部定义的常规变量使用自动存储空间,即自动变量。在所属函数被调用时自动产生,在函数结束时自动消亡。自动变量是一个局部变量,该函数即为其作用域,通常存储在栈(stack),(注意:通常说的“堆栈”,其实指的是栈!)在调用函数时,变量进栈,函数结束时变量出栈,LIFO。2.静态存储静态存储是在整个程序运行期间都存在的存储方式,在函数外面定义变量或者在声明变量的时候加上...原创 2018-04-27 00:00:03 · 528 阅读 · 0 评论 -
C++引用与临时变量
1.引用引用是C++的一种复合类型,是已定义的变量的别名,与原变量在同一个内存地址。引用常常作为函数的形参,此时函数将使用原始数据(而不是原始数据的副本)。 使用引用时需要注意以下两点: ①必须在声明引用的时候就进行初始化,否则编译会报错。 int line = 100; int &d = line; ②一旦成为某个变量的引用,则将一直效忠于它。 下面通过...原创 2018-05-05 13:24:38 · 2030 阅读 · 0 评论 -
C++构造函数与类型转换explicit(大疆2018校招软件组考点之一)
类的构造函数是用于类成员变量的初始化,由编译器隐式调用。1.默认构造函数假设我们定义一个类的名字叫Student,成员变量有int age和char* name。1.1.定义默认构造函数注意: - 当且仅当程序员没有定义构造函数时,编译器将提供默认构造函数。 - 程序员为类定义了构造函数后,就必须为它定义默认构造函数(且只能定义一个默认构造函数) 定义默认构造函...原创 2018-05-06 12:20:00 · 337 阅读 · 0 评论 -
C++复制构造函数
1.体验构造函数C ++里的类有默认构造函数,自己定义的构造函数,允许通过类构造函数实现类的类型的隐式转换或者显示转换(构造函数前带explicit关键字),比如如下代码Jungle定义了一个类A,定义了两个构造函数:using namespace std;class A{public: A() { index++; age = -1...原创 2018-05-09 23:17:09 · 1726 阅读 · 2 评论