![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 88
问卿至
这个作者很懒,什么都没留下…
展开
-
C++ 虚继承(虚基类表指针与虚基类表)
在C++中,我们会遇到virtual这个关键字,但是它有两种含义:虚函数和虚继承,它们两个是完全无相关的两个概念。什么是虚继承 虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的...原创 2019-01-21 21:07:20 · 3116 阅读 · 0 评论 -
智能指针
C++里面的四个智能指针:auto_ptr,shared_ptr,weak_ptr,unique_ptr其中后三个式C++11支持,并且第一个已经被11弃用。使用智能指针的原因 智能指针的作用是管理一个指针,因为存在一下情况:申请的空间在函数结束结束的时候忘记了释放,造成内存泄漏,使用智能指针可以很大程度上避免这个问题,因为智能指针就是一个类,当超出类的作用域时,类就会调用析构函数,析构...原创 2019-08-11 16:59:19 · 143 阅读 · 0 评论 -
static关键字的作用
1.全局静态变量在全局变量之前加static,全局变量就定义为一个全局静态变量。内存中的位置:静态存储区,在整个程序运行间一直存在初始化:未经初始化的全局变量会被自动初始化为0(自动对象的值是任意的,除非它被显示初始化)作用域:全局静态变量在声明它的文件之外不可见,准确的说从定义点开始,到文件结束。2.局部静态变量在局部变量之前加上关键字static,局部变量就成为一...原创 2019-08-10 11:44:15 · 118 阅读 · 0 评论 -
gcc和g++的区别
共同点:都可以用来编译后缀名为:.c 和.cpp文件。gcc是鼻祖,后来才出现g++;不同点:1.g++会自动链接c++的编译库:比如algorith,string,vector等。2 .gcc会根据后缀名(.c 和.cpp)自动识别是C文件还是C++ 文件,而g++会均认为是C ++文件。3. gcc编译文件少了许多宏,而g++编译文件多了许多宏,类如#defi...原创 2019-08-07 12:39:33 · 142 阅读 · 0 评论 -
大小端的判断
1.何为大小端 大端模式:是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中 小端模式:是指数据的低位保存在内存的低地址中,而数据的高位保存在 内存的高地址中。2.为什么会有大小端之分 在计算机系统中,我们以字节为存储单位,每个地址的单元都是对应的一个字节,一个字节为8bit.在C语言中,不仅仅是一个字节来存储数据,除了一个字节...原创 2019-08-07 11:12:18 · 421 阅读 · 1 评论 -
二进制中1的个数
思路:对于一个整数,每次与它减一的数做与运算,总会消除它二进制中最右边的1。因此直到它做与运算到0是的次数即为它二进制中1的个数# include<iostream>using namespace std; int fun(int n){ int count = 0; while (n) { count++; n = n &(n - 1); } ...原创 2019-08-05 20:47:21 · 209 阅读 · 0 评论 -
重载,隐藏,覆盖
在C++中同名的函数有三种:1.重载:又称(重定义) 同名 同作用域 不同参数(参数类型,参数个数,参数顺序);#include<iostream>using namespace std;void fun(int a,int b){ cout<<"int int"<<endl;}void fun(double a,do...原创 2019-08-04 16:36:31 · 151 阅读 · 0 评论 -
浅谈const, 引用(&) ,内联函数(inline)的用法。
const在C语言中,const修饰的变量被称为常变量,编译阶段,不能做左值,其他处理和变量一样。在C++中,const修饰的变量被称为常量,在编译阶段,把用到常量的地方替换成常量初始化的值 注意:1.常量一定要初始化 2.不允许常量做左值 3.不允许间接修改,杜绝间接访问来修改常量风险 。全局变量: 在C语言中,const修饰的全...原创 2019-07-22 19:47:02 · 455 阅读 · 0 评论 -
区分C和C++动态开辟内存
在C++中,开辟动态内存的关键字是new, 释放动态内存的关键字是delete 在C语言中,开辟动态内存的函数字是malloc,释放动态内存的的函数字是free1.开辟数组:ree(p1);2.开辟一个空间: 在C++中,可以初始化: int *p2= new int(8);# include <iostream>us...原创 2018-11-25 22:41:22 · 288 阅读 · 0 评论 -
原码,反码,补码的计算
一、整数:(1)正数(符号位为0):原码,反码,补码均一致(2)负数(符号位为1):原码:二进制表示反码:符号位不变,其余取反 补码:反码+1 例如-5的原码:1000 0101 反码:1111 1010 补码:1111 1011二、小数(1)正数(符号位为0):原码,反码...原创 2019-08-04 14:46:25 · 4894 阅读 · 2 评论 -
C++的四个强制类型转换
reinterpret_cast:一个指针转化为其他类型的指针时,不做类型检测,操作结果是一个指针指向另一个指针的值的二进制拷贝;static_cast:允许执行隐式转换和相反的转换操作,父类转换为子类是强制转换Son *son=static_cast(father),而子类转换为父类就是隐式转换;dynamic_cast:用于对象的指针和引用,当用于多态类型转换时,允许隐式转换及相反的过...原创 2019-08-04 14:16:49 · 191 阅读 · 0 评论 -
写时拷贝技术
写时拷贝的主要思想是在复制原来实体的时候,如果复制后的实体不需要进行改变,那么实际上没必要进行实体内容的拷贝,只需建立一个引用指向原来的实体内存,直接应用原来的实体内容即可,只有当需要对复制后的实体进行修改的时候才进行内容的拷贝。写时拷贝技术在很多方面都有应用,典型的有: C++中的写时拷贝技术 ...原创 2019-08-02 21:03:09 · 277 阅读 · 0 评论 -
工厂模式和观察者模式
工厂模式工厂模式分为三种:即简单工厂模式、工厂方法模式、抽象工厂模式,其实大同小异,总结下来就是:简单工厂模式:一个工厂,多个产品。产品需要有一个虚基类。通过传入参数,生成具体产品对象,并利用基类指针指向此对象。通过工厂获取此虚基类指针,通过运行时多肽,调用子类实现。#include<iostream>#include<string>using names...原创 2019-01-18 20:53:48 · 474 阅读 · 0 评论 -
结构体,联合体,类的大小计算
1.结构体的大小 当结构体为空时,其大小为1;#include<iostream>using namespace std;struct s{};int main(){ cout<<sizeof(s)<<endl; return 0;}结构为:选取结构体中类型字节数量最大的为内存对齐。注意:最大的类型数字节。...原创 2019-04-27 19:56:43 · 269 阅读 · 0 评论 -
运算符重载时要遵循的原则
1.除了类属关系运算符“ . ”,成员指针运算符“ .* ”,作用域运算符“ :: ”,sizeof运算符和三目运算符“ :?”以外,C++中的所有运算符都可以重载。 2.重载运算符限制C++语言中已有的运算符范围内的允许重载的运算符中,不能创建新的运算符。 3.运算符重载的实质是函数重载,因此编译程序对运算符重载的选择遵循函数的重载的选择原则。 4.重载之后的运算...原创 2019-04-22 09:48:33 · 1113 阅读 · 0 评论 -
封装,继承,多态
封装: 定义:就是将抽象得到的数据和行为相结合,形成一个有机整体,也就是将数据和代码进行有机的结合,形成类,其中的数据和函数都是类的成员,目的在于将对象的使用者和设计者分开.以提高软件的维护性和可修改性. 特性: 1.结合性,即就是将属性和代码结合.2.信息隐藏性,利用接口机制隐藏内部的实现细节,只留下接口给外界调用3.实现代码的重用. 继承: ...原创 2019-08-21 14:32:19 · 188 阅读 · 0 评论