C++
Jammm
除了聪明 没有什么好说的 除了学习 没有什么好干的
展开
-
《Effective C++》读书笔记
《Effective C++》的目录方便回顾。1.视c为一个语言联邦2.尽量以constenuminline替换-define3.尽可能使用const4.确认对象被使用前已先被初始化5.了解c默默编写并调用了哪些函数6.若不想使用编译器自动生成的函数就该明确拒绝7.为多态基类声明virtual析构函数8.别让异常逃离析构函数9.绝不在构造和析构过程中调用virtual函数10.令operator-返回一个reference-to-this11.在operator-中处理自我赋值12.原创 2020-12-21 00:03:20 · 330 阅读 · 1 评论 -
sizeof()求类的大小
空类、带构造函数、带虚函数#include<iostream>using namespace std;class A{};class B{public: B() {} ~B() {}};class C{public: C() {} virtual ~C() {}};int main(){ cout <&l...原创 2018-08-28 19:36:01 · 2182 阅读 · 3 评论 -
C++---智能指针(auto_ptr、unique_ptr、shared_ptr)
智能指针void fun(string str){ string ps = new string(str); str = ps; return;}当函数调用时,都会分配堆中的内存,但没有回收,会导致内存泄漏。这种情况在 return 之前加上 free 就可以了。void fun(string str){ string ps = new s...原创 2018-08-26 23:56:28 · 892 阅读 · 0 评论 -
C++---写时拷贝解决深浅拷贝问题
对于普通的类型来说,拷贝没什么大不了的。int a = 0;int b = a;不会出现任何问题。而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。浅拷贝首先来说说我们常遇到的浅拷贝的情况。#include <stdio.h> class student{public: student() // 构造函数...原创 2018-08-03 15:45:53 · 570 阅读 · 0 评论 -
C++---静态多态与动态多态
多态多态按字面的意思就是多种形态,相同的方法调用,但是有不同的实现方式。多态性可以简单地概括为“一个接口,多种方法”。 C++有两种多态形式:静态多态动态多态静态多态静态多态:也称为编译期间的多态,编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型转换),可推断出要调用那个函数,如果有对应的函数就调用该函数,否则出现编译错误。 静态多态有两种实现方式...原创 2018-08-02 18:32:37 · 43714 阅读 · 7 评论 -
实现一个memcpy函数和strcpy函数
memcpy函数c和c++使用的内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。 函数原型:void* Memcpy(void* dest, const void* src, const rsize_t n) 因为是内存拷贝,所有接受的值也不知道是什么类型的,所以给出一个void*类型来接收。void的含...原创 2018-08-09 15:52:26 · 819 阅读 · 0 评论 -
C++---继承(单继承、多继承、菱形继承和虚拟继承)
为什么继承面向对象编程的主要目的之一是提供可重用的代码。传统的C函数库通过预定义、预编译函数实现。C++通过类继承实现,累继承的大致功能:可以在已有的类的基础上添加功能可以添加数据修改类方法的行为基类&派生类从一个类派生出另一个类时,原始类称为基类,继承类称为派生类。 首先定义一个基类,表示乒乓球会会员。// 乒乓球会会员类class Tab...原创 2018-07-31 17:18:13 · 550 阅读 · 0 评论 -
C++---六个默认成员函数
类类是一种将抽象转化为用户定义类型的C++工具,它将数据表示和操纵数据的方法组成一个简洁的包。类的大小实现来看一下什么都么有的类–空类 空类的大小为 1 ,这是为什么呢? 当创建一个空类时就要创建一个地址,来标识空类的地址,编译器往往会给一个空类隐含的加一个字节,这样空类在实例化后在内存得到了独一无二的地址,所以空类所占的内存大小是1个字节。 非空类的大小是怎么计算的...原创 2018-07-29 21:40:08 · 365 阅读 · 0 评论 -
C++---引用变量(&)
引用变量引用是已定义变量的别名创建引用int a;int & b = a; // b为a的引用引用(&),b 为 a 的别名在函数引用时,必须对其初始化一个变量可以有多个引用,一个引用只能指向一个实体a 和 b 指向的是同一块内存空间将引用作为参数引用作为函数参数,使得函数中的变量名成为调用函数程序中的变量的别名。这种传递称为引...原创 2018-07-29 14:23:11 · 10162 阅读 · 4 评论 -
C++---内联函数和宏函数的优缺点
内联函数内联函数是C++为提高程序运行速度进行的改进,是一种以空间换时间的做法。内联函数与常规函数常规函数运行程序时,常规函数调用会使程序跳到另一个地址(函数地址),并在函数结束时返回。 详细过程:执行到函数调用指令时,程序将在函数调用后立即存储该指令的内存地址,并将函数参数复制到堆栈(为此保留的内存块),跳到标记函数起点的内存单元,执行函数代码(也许还需要将返回值放入寄...原创 2018-07-28 23:05:07 · 2776 阅读 · 0 评论 -
C++:函数的递归调用--实现斐波那契数列
求斐波那契数列第20项。要求第20项,就要求第19项和第18项,要求第19项,就要求第18项和第17项,所以该问题可以使用递归方法解决。 可以这样分解: fib(20) = fib(19) + fin(18); fib(19) = fib(18) + fin(17); ... fib(3) = f...原创 2018-03-28 16:47:42 · 11311 阅读 · 0 评论 -
C++:二维数组--输出斐波那契数列的前20项
大家都知道,在数学世界中有很多神奇的数列,斐波那契数列正是众多有规律的数列中的一种。该数列是意大利数学家列昂纳多·斐波那契发现的。他的基本规律是从第三项开始,每一项都等于前两项之和,第一项和第二项都是1。斐波那契数列如下图所示: 1、1、2、3、5、8、13、21、34、55......下面利用数组来输出该数列的前20项。#include<iostream...原创 2018-03-28 16:07:43 · 14772 阅读 · 2 评论 -
C++中的便利之道----模板
1.什么是模板 模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现代码的可重用性。而且模板能够减少源代码量并提高代码的机动性,而不会降低类型安全。3 C++程序由类和函数组成,模板也分为类模板和函数模板。模板就是把功能相似、仅数据类型不同的函数或类设计为通用的函数模板或类模板,提供给用户。2.模板的作用 对不同数据类型分别定义不同的重载过于繁琐,...原创 2018-04-14 16:29:27 · 271 阅读 · 0 评论 -
C++:实现计算贷款支付额问题
计算月支付额的公式如下:月支付额 = (贷款总额 * 月利率) / (1 - 1/(1 + 月利率)^(年数*12))#include<iostream>#include<math.h>using namespace std;int main(){ int year = 0;//贷款年数 double annualRate = 0;//年利率 doubl...原创 2018-03-14 17:09:51 · 2147 阅读 · 0 评论 -
关于函数重载
什么是函数重载 所谓函数重载是指同一个函数名可以对应着多个函数的实现。例如,可以给函数名add()定义多个函数实现,如果一个函数实现是求两个整数之和,另一个实现是求两个实数之和,再一个实现是求两个复数之和。每种实现对应着一个函数体,这些函数的名字相同,但函数的参数类型不同。参数类型不同的重载函数原创 2017-11-05 14:44:55 · 1107 阅读 · 0 评论 -
浅谈this指针
什么是this指针当你进入一个房子后,你可以看见桌子、椅子、地板等,但是房子你是看不到全貌了。对于一个类的实例来说,你可以看到它的成员函数、成员变量,但是实例本身呢?this是一个指针,它时时刻刻指向你这个实例本身。通过测试对象的大小,我们发现对象的大小是类中所有数据成员的大小之和(考虑内存对齐)。所有对象共用成员函数。不同的对象都调用同一个代码段,那么当不同对象的原创 2017-11-05 11:09:03 · 246 阅读 · 0 评论