C++基础知识
文章平均质量分 63
lizhentao0707
这个作者很懒,什么都没留下…
展开
-
C++ 向vector中读入固定长度为n的一组数据
(1) 读入固定长度为n的一组数据#include<iostream>#include<vector>using namespace std;int main(){ // 读入长度为n的数据 int n; cin >> n; vector<int> ivec(n, 0); for (auto &m : ivec) /...原创 2018-07-06 15:01:38 · 1651 阅读 · 0 评论 -
C++ getline(cin,str), getchar(), cin ,cin.ignore() 字符串和字符读入方式的区别
1 cin读入数字、字符、字符串等,读到空格符、制表符、换行符停止读入。2getline(istream &is , string &str , char delim)读入带空格、制表符等字符的字符串用getline,其原型为如下:istream& getline ( istream &is , string &str , char de...原创 2019-11-21 19:45:45 · 612 阅读 · 0 评论 -
struct和class的空间大小计算
struct和class的空间大小计算总体上遵循两个原则:(1) 整体空间是占用空间最大的成员所占字节的整数倍;但在Linux+gcc环境下,若最大的成员类型所占字节超过4,如double是8,则整体空间是4的倍数即可。(2) 数据对齐原则——内存按结构体成员的先后顺序排列,当排到该成员变量时,其前面已摆好的空间大小必须是成员类型大小的整数倍,如果不够就对齐,依次向后类推。特殊情况:(1) 含静态...原创 2018-06-19 17:47:32 · 518 阅读 · 0 评论 -
判断两个结构体是否相等(运算符重载函数)+是否能用memcmp函数判断结构体相等
判断两个结构体是否相等:重载操作符"=="运算符重载函数(1) 类外定义的普通运算符重载函数:只能访问类中的公有数据成员,而不能访问类的私有数据成员;(2) 友元运算符重载函数:若友元运算符重载函数重载的是双目运算符,则参数表中有两个操作数;若重载的是单目运算符,则参数表中只有一个操作数。(3) 成员运算符重载函数:若成员运算符重载函数重载的是双目运算符,则参数表中只有一个操作数,...原创 2018-07-02 19:06:15 · 6815 阅读 · 4 评论 -
C++运行时类型识别RTTI和显式转换+如何根据基类指针判断指针指向的子类?
运行时类型识别RTTI和显式转换C++用于类型转换的4个操作符:reinterpret_cast,const_cast,static_cast,dynamic_cast。转换形式:cast_name<type>(expression)(1) reinterpret_cast:本质上依赖于机器,非常危险,避免使用。(2) const_cast:改变表达式的常量属性(添加或...原创 2018-07-17 11:38:56 · 838 阅读 · 0 评论 -
数组指针与指针数组
数组指针与指针数组1 数组指针 数组指针是一个指向数组的指针,本质是一个指针,只不过它指向的是一个数组。一个指向有10个元素整型数组的指针定义为: int(*p)[10]; //(其中[]表示指向数组,10表示数组大小)。由于[]的优先级高于*,所以必须加上()。 二维数组的数组名是一个数组指针。 int(*p)[10]; int a[4][10];...原创 2018-07-07 20:15:00 · 144 阅读 · 0 评论 -
C++继承与虚函数
本篇文章针对面试过程中继承以及虚函数方面的知识做一总结,查缺补漏,希望对大家有帮助。单继承下的虚函数表//单继承下虚函数表:是如何组织的class A{public: virtual void func(){ cout << "A::func" << endl; } virtual void funcA(){ cout << "A::funcA" <...转载 2018-07-15 10:12:48 · 1161 阅读 · 0 评论 -
智能指针的原理及实现
智能指针1 智能指针的作用 智能指针是一个类,用来存储指向动态分配对象的指针,负责自动释放动态分配的对象,防止堆内存泄漏。动态分配的资源,交给一个类对象去管理,当类对象声明周期结束时,自动调用析构函数释放资源2 智能指针的种类 shared_ptr、unique_ptr、weak_ptr、auto_ptr (1) shared_ptr ...原创 2018-07-22 17:28:20 · 23709 阅读 · 6 评论 -
C++ 向vector中读入不定长度的一组数据
向vector中读入不定长度的一组数据(1) 使用getchar()函数#include<iostream>#include<vector>using namespace std;int main(){ vector<int> ivec; int num; do { cin >> num; ivec.push_b...原创 2018-08-30 17:21:14 · 3301 阅读 · 0 评论 -
strcpy函数实现(考虑内存折叠)
char *my_strcpy(char *dst, const char *src, size_t cnt){ if (nullptr == dst || nullptr == src || cnt == 0) return nullptr; char *temp1 = dst; const char *temp2 = src; if (dst <= src || src ...原创 2018-09-23 23:10:51 · 287 阅读 · 0 评论 -
C++关键字static
staticstatic用来声明静态成员,包括静态数据成员和静态成员函数,它们被类的所有对象共享,实现一个类的不同对象之间的数据共享。eg:统计总数、平均数。静态数据成员存放在静态存储区,sizeof(类)的内存空间大小时不包括静态成员变量的大小;与普通的数据成员不同,无论创建多少个类的对象,都只有一个静态数据成员的拷贝,从而实现一个类的不同对象之间的数据共享。使用静态数据成员可以不必使用全局变量...原创 2018-06-24 20:30:17 · 121 阅读 · 0 评论 -
new和malloc的区别
malloc/free和new/delete(1) 属性:malloc和free是C/C++的库函数,new/delete是C++运算符;(2) 返回类型:new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符;而malloc内存分配成功则是返回void * ,需要通过强制类型转换将void*指针转换成我们需要的类型。(3) 用法...原创 2018-06-23 22:23:12 · 128 阅读 · 0 评论 -
虚函数和多态
原文链接:https://blog.csdn.net/lcalqf/article/details/528414721、c++多态实现C++中的虚函数的作用主要是实现多态的机制。关于多态,简而言之就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。例如:[cpp] view plain copy#include <iostream> #include <...转载 2018-05-04 09:49:04 · 103 阅读 · 0 评论 -
C++中的虚函数(表)实现机制详解
原文链接:https://blog.twofei.com/496/前言大家都应该知道C++的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个基类的指针, 其指向一个继承类, 当通过基类的指针去调用函数时, 可以在运行时决定该调用基类的函数还是继承类的函数. 虚函数是实现多态(动态绑定)/接口函数的基础. 可以说: 没有虚函数, C++将变得一无是处!既然是C++的精髓, 那么我们有必要了解一...转载 2018-05-04 11:01:00 · 741 阅读 · 0 评论 -
RTTI机制与作用
原文链接:https://blog.csdn.net/gogokongyin/article/details/51178303 一、RTTI(Run-Time Type identification),通过运行时类型信息,程序能够使用基类的指针或引用来检查这些指针或引用所指向的对象的实际派生类型。面向对象的编程语言,想C++,Java,delphi都提供了RTTI的支持。RTTI并不是什么新...转载 2018-05-04 15:37:30 · 120 阅读 · 0 评论 -
内存分区
C++内存分区(1) 栈(stack):由系统自动分配与释放,存放函数的局部变量、参数和返回值;地址空间向下减少,即当栈上保存的数据越多,栈的地址就越低。(2) 堆(heap):由程序员手动分配和释放,存放程序中动态分配的变量;由malloc或new分配,free和delete来释放,并手动置NULL;堆的地址空间向上增加,即当堆上保存的数据越多,堆的地址就越高。(3) 全局(静态)存...原创 2018-05-17 15:34:42 · 399 阅读 · 0 评论 -
指针和引用
指针和引用的区别(1) 指针是对象的地址,引用是对象的别名;(2) 初始化:引用定义时必须初始化,没有指向空值的引用;指针可以指向空值NULL,可以在任何时候初始化;(3) 指向:引用一旦初始化,就与对象绑定在一起,无法更改;指针可以指向不同的对象;(4) 多级:指针可以有多级,但不存在多级引用(因为引用本身不是对象,所以不能定义引用的引用);(5) sizeof结果:sizeof(引用)得到的是...原创 2018-05-05 20:08:58 · 129 阅读 · 0 评论 -
C++面试总结
原文链接:https://blog.csdn.net/eversliver/article/details/51834399虚函数与纯虚函数:引入虚函数是为了动态绑定,引入纯虚函数是为了派生接口 基类需要虚的析构函数的原因: 当derived class由一个base class指针被删除而该base class指针为non-virtual的时候,可能会发生内存泄漏,使用虚的析构函数可以解决该问题...转载 2018-05-06 19:49:47 · 315 阅读 · 0 评论 -
派生类函数屏蔽基类中同名函数
原文链接:https://blog.csdn.net/iicy266/article/details/11906697派生类可以继承基类中的非私有函数成员,当然也就可以继承其中非私有的被重载的函数。如下:【参考代码】[cpp] view plain copyclass Base { public: void print() { cout << "print() in...转载 2018-05-07 09:21:29 · 1319 阅读 · 0 评论 -
C与C++的区别
原文链接:https://blog.csdn.net/eversliver/article/details/518343991、C++是面向对象语言,C是面向过程语言。 2、结构:C以结构体struct为核心结构;C++以类class为核心结构。 3、多态:C可以以宏定义的方式“自定义”部分地支持多态;C++自身提供多态,并以模板templates支持编译期多态,以虚函数virtual funct...转载 2018-05-14 09:43:08 · 249 阅读 · 0 评论 -
C++ 虚函数
链接:https://www.jianshu.com/p/01c6ade8b87a引言C++面向对象语言的一大特性就是抽象,在程序设计上的体现就是鼓励面向接口编程,而不要面向具体实现编程。这里所说的抽象和接口与C++的多态性密切相关。C++的多态分为静态多态(编译时多态)和动态多态(运行时多态)两大类。静态多态通过重载、模板来实现;动态多态就是通过本文的主角虚函数来体现的。虚函数是C++语言一个非...转载 2018-05-04 15:01:42 · 268 阅读 · 0 评论 -
面向对象设计的六大原则
1. 单一职责原则一个类的功能要单一;就一个类而言,应该仅有一个引起他变化的原因,即每一个类应该专注于做一件事情。2. 开放封闭原则面向扩展开放,面向修改封闭。3. 里氏替换原则子类必须能够替换基类,否则不应当设计为其子类。4. 依赖倒置原则实现尽量依赖抽象,不依赖具体。5. 接口隔离原则为客户端提供尽可能小的单独的接口,而不是提供大的总的接口。6. 最少知识原则一个对象应当尽可能少的去关联其他对...原创 2018-04-13 09:55:11 · 118 阅读 · 0 评论