
C++
水果先生
Tencent AI
展开
-
C++面试 C++11 新特性之 Class
sizeof新标准中,sizeof可以直接用于获取Class::member的大小,而不用通过Class的实例。class TestClass{public: int member_i; char member_c;};cout<<"test sizeof class member:\n";cout<<sizeof(TestClass...原创 2018-04-01 00:30:25 · 491 阅读 · 0 评论 -
C++面试 C++11 新特性之智能指针
shared_ptrshared_ptr 基本用法shared_ptr**采用引用计数的方式管理所指向的对象**。当有一个新的shared_ptr指向同一个对象时(复制shared_ptr等),引用计数加1。当shared_ptr离开作用域时,引用计数减1。当引用计数为0时,释放所管理的内存。这样做的好处在于解放了程序员手动释放内存的压力。之前,为了处理程序中的异常情况,往往需要将指针...原创 2018-03-31 23:59:09 · 4033 阅读 · 0 评论 -
C++面试 C++11 新特性之容器相关特性
cbegin和cend原来的begin和end返回的iterator是否是常量取决于对应的容器类型,但是有时,即使容器不是常量类型,我们也希望获得一个const_iterator,以避免不必要的修改行为。C++11新标准中提供了cbegin和cend函数,无论容器类型,都固定返回const_iterator。vector<int> c1 = {0, 1, 2, 3, 4};a...原创 2018-03-31 23:13:34 · 587 阅读 · 0 评论 -
C++面试 C++11 新特性之 lambda
lambda 简介熟悉Python的程序员应该对lambda不陌生。简单来说,lambda就是一个匿名的可调用代码块。在C++11新标准中,lambda具有如下格式:[capture list] (parameter list) -> return type { function body }可以看到,他有四个组成部分:capture list: 捕获列表parame...原创 2018-03-31 22:47:16 · 1098 阅读 · 0 评论 -
C++面试 C++11 新特性之类型推断与类型获取
简单的类型推断 autoC++11新标准中增加了auto类型说明符,可以让编译器帮我们分析表达式的类型。double val1 = 1.1, val2 = 2.2;auto sum = val1 + val2;auto val3 = 0.3, *p = &val3;//auto val4 = 0, val5 = 0.0; // wrong. different types....原创 2018-03-31 21:48:34 · 3207 阅读 · 0 评论 -
C++面试 C++11新特性之新类型与初始化
新类型unsigned long long / long long类型在C++11中,标准要求long long整型可以在不同平台上有不同的长度,但至少有64位。我们在写常数字面量时,可以使用LL后缀(或是ll)标识一个long long类型的字面量,而ULL(或ull、Ull、uLL)表示一个unsigned long long类型的字面量。 比如://定义了一个有符号...原创 2018-03-31 19:30:15 · 570 阅读 · 0 评论 -
C++面试 设计模式之工厂模式
简单工厂模式在创建一个对象时不向客户暴露内部细节;简单工厂不是设计模式,更像是一种编程习惯。它把实例化的操作单独放到一个类中,这个类就成为简单工厂类,让简单工厂类来决定应该用哪个子类来实例化。假设有一个工厂,他能生产出A、B两种产品。当客户需要产品的时候,要告诉工厂是哪种产品,是A还是B。当新增加一种新产品的时候,那么就要去修改工厂的类。// Factory.cpp : 定义控...原创 2018-03-31 18:05:42 · 1731 阅读 · 1 评论 -
C++面试 设计模式之单例模式(C++11)
单例模式确保一个类只有一个实例,并提供了一个全局访问点。单例模式,可以说设计模式中最常应用的一种模式了,据说也是面试官最喜欢的题目。但是如果没有学过设计模式的人,可能不会想到要去应用单例模式,面对单例模式适用的情况,可能会优先考虑使用全局或者静态变量的方式,这样比较简单,也是没学过设计模式的人所能想到的最简单的方式了。一般情况下,我们建立的一些类是属于工具性质的,基本不用存储太多的跟自...原创 2018-03-31 15:59:44 · 5329 阅读 · 2 评论 -
C++ 面试 C++ 11 新特性之右值引用与移动
右值引用什么是左值,什么是右值,简单说左值可以赋值,右值不可以赋值。以下面代码为例,“ A a = getA();”该语句中a是左值,getA()的返回值是右值。#include <iostream>class A{public: A() { std::cout << "Constructor" << std::endl; } ...原创 2018-04-02 11:29:38 · 1626 阅读 · 0 评论 -
C++ 面试 C++ 11 新特性之 template
functionC++提供了很多种可调用对象,例如函数指针、lambda、重载了operator()的对象等。有时我们需要将这些对象统一管理,这时使用如下这种方式是不行的:int add(int i, int j) { return i + j; }struct divide{ int operator()(int i, int j) { retur...原创 2018-04-02 12:03:31 · 1493 阅读 · 2 评论 -
C++面试 C++ 11 新特性之杂项
类型别名声明类似typedef,新标准中可以使用using为类型声明一个别名(alias)。std::cout<<"test using alias:\n";using HT = double;using NAME = std::string;HT h = 1.78;NAME name = "Robert";std::cout<<name<<...原创 2018-04-02 12:43:10 · 746 阅读 · 0 评论 -
C++面试 C++ 11 新特性之随机数库
之前,C++中的随机数生成都依赖于一个简单的rand函数。这个函数产生一定范围内的一个均匀随机整数。如果需要其他随机分布或者其他范围的随机数,就需要根据rand函数产生的随机数进行再加工,不过这时,就容易引入非随机性了。#include<iostream>#include<cstdlib>#include<ctime>using namespace...原创 2018-04-02 12:29:31 · 759 阅读 · 0 评论 -
C++面试 C++ 11 新特性之正则表达式
简单用法先看看如何用C++11中的regex匹配一个电子邮箱地址。std::cout<<"test regex simple usage:\n";std::string email_pattern("(\\w)+(\\.\\w+)*@(\\w)+((\\.\\w+)+)");try{ std::regex email_regex(email_pattern); ...原创 2018-04-02 12:24:44 · 543 阅读 · 0 评论 -
Ubuntu16.04+CUDA9+cudnn7+python3.5+源码编译Tensorflow1.4+opencv3.3
为了加快环境所需依赖的下载速度,首先更新 apt-get 源Ubuntu16.04[清华大学映像]如何修改默认的更新源呢:首先备份:$sudo cp /etc/apt/sources.list etc/apt/sources.list_backup修改:$sudo gedit /etc/apt/sources.list清空并替换为# 默认注释了源码镜像以提高 apt update 速度,如有需要可自原创 2017-12-14 22:14:06 · 4000 阅读 · 1 评论 -
C++中的重载重写与重定义
C++中的重载重写与重定义原创 2016-12-18 12:58:41 · 348 阅读 · 0 评论 -
C++多态中的构造函数与析构函数
为什么不存在虚构造函数?不存在virtual虚函数的构造函数,虚函数采用的是一种虚调用的方法,虚调用是一种可以只知道对象一部分信息的情况下的调用,而构造函数是生成一个对象,必须要初始化对象的所有信息,所以构造函数不能为虚函数。为什么会存在虚析构函数?关于虚析构函数:定义虚析构函数主要的用途是在多态的案例中,我们最好将所有的析构函数均声明为虚析构函数,那么我们在释放对象内存的时候,可以通过调用基类对象原创 2016-12-18 12:51:02 · 550 阅读 · 0 评论 -
C++覆盖(虚函数的实现原理)
Class Shape{public: virtual void cal_area() { }private: int m_ir;};Class Circle:public Shape{public: virtual void cal_area() { }};类Circle继承类Shape当用Shape类实例化一个指针对象,并S原创 2016-10-14 22:13:33 · 2884 阅读 · 0 评论 -
C++学习路线图
C++学习路线图一、入门视频:零起点学通C++(范磊)电子书:C++ Primer第三版、第四版http://pan.baidu.com/share/link?shareid=432594&uk=1211444507&third=15二、VC++学习视频:1、VC++深入详解(修订版) http://pan.baidu.com/shar转载 2016-10-25 16:44:10 · 508 阅读 · 0 评论 -
虚函数的使用限制
虚函数不能用于构造函数 虚函数不能用于普通函数虚函数不能用于静态的成员函数注意:当虚函数加在内联成员函数前面时,virtual inline void test(){}可以编译但是,编译器会自动忽略inline关键字,这样这个成员函数就不会被认为是内联函数。原创 2016-10-14 21:42:17 · 282 阅读 · 0 评论 -
虚函数和纯虚函数的作用与区别
虚函数为了重载和多态的需要,在基类中是有定义的,即便定义是空,所以子类中可以重写也可以不写基类中的此函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};void Move();pr转载 2016-10-13 19:24:23 · 261 阅读 · 0 评论 -
虚析构函数的作用
我们知道,用C++开发的时候,用来做基类的类的析构函数一般都是虚函数。可是,为什么要这样做呢?下面用一个小例子来说明: 有下面的两个类:class ClxBase{public: ClxBase() {}; virtual ~ClxBase() {}; virtual void DoSomething() { cout "Do转载 2016-10-13 19:23:52 · 206 阅读 · 0 评论 -
C++ 隐藏
B类继承A类,但是A,B中定义了同名的成员函数或者成员变量,此时就会出现“隐藏”。 例如: 那么,如果运行程序 soldier.play();//将会调用子类中定义的成员函数。//若想调用父类中定义的成员函数soldier.Person::play();原创 2016-10-13 16:26:53 · 293 阅读 · 0 评论 -
C++ 继承
公有继承保护继承私有继承原创 2016-10-13 15:58:22 · 239 阅读 · 0 评论 -
c++之带默认形参值的函数
先来个例子: 1 #include 2 3 using namespace std; 4 5 int sub(int x=8,int y=3){ 6 return x+y; 7 } 8 9 int main(){10 //freopen("D:\\input.in","r",stdin);11 //freopen("D:\\out转载 2016-11-03 10:45:24 · 1048 阅读 · 0 评论 -
构造函数和析构函数的调用顺序
对象成员:Line中有对象成员Coordinate时顺序为Coordinate();Line();~Line();~Coordinate();对象成员指针:Line中有对象Coordinate的对象成员指针时顺序为Coordinate();Line();~Coordinate();~Line();原创 2016-10-11 21:02:53 · 365 阅读 · 0 评论 -
C++中的拷贝构造函数
class Student{public: Student() {cout<<"Student"<<endl;}private: string m_strName;};int main(){ Student S1; Student S2=S1; Student S3(S2); return 0;}此程序的运行结果: 在实例化对象原创 2016-10-10 22:05:50 · 343 阅读 · 0 评论 -
C++的初始化列表
初始化列表:class Stu{public: Stu():m_stuName("Merry"),m_stuAge(20){}private: string m_stuName; int m_stuAge;};初始化列表的特性1.初始化列表先于构造函数执行。2.初始化列表只能用于构造函数。3.初始化列表可以同时初始化多个数据成员,效率高,速度快。注意:初始化列表中的成原创 2016-10-10 21:25:02 · 389 阅读 · 0 评论 -
C++中new与malloc的10点区别
前言几个星期前去面试C++研发的实习岗位,面试官问了个问题:new与malloc有什么区别?这是个老生常谈的问题。当时我回答new从自由存储区上分配内存,malloc从堆上分配内存;new/delete会调用构造函数/析构函数对对象进行初始化与销毁;operator new/delete可以进行重载;然后强行分析了一下自由存储区与堆的区别。回来后感觉这个问题其实回答转载 2016-10-10 19:12:45 · 217 阅读 · 0 评论 -
内联函数
逻辑简单,调用频繁的函数建议使用内联。递归函数无法使用内联方式。原创 2016-10-09 16:39:00 · 229 阅读 · 0 评论 -
C++中的函数默认参数值
void fun1(int i,int j=6,int k=19);//正确void fun2(int i,int j=6,int k);//错误void fun3(int i,int j=6,int k=19);void fun3(int i,int j,int k){ //声明时可以加默认参数值,但是定义时最好不要加默认参数值。}int main(){ fun1(20)原创 2016-10-09 16:29:16 · 366 阅读 · 0 评论 -
C++namespace
namespace即命名空间,可以自己定义一个命名空间。#include<iostream>namespace A{ int x=1; void fun() { cout<<"A的命名空间"<<endl; }}namespace B{ int x=2; void fun() { cout<<"B的命名空原创 2016-10-09 10:34:44 · 284 阅读 · 0 评论 -
虚析构函数的实现原理
虚析构函数的理论前提是执行完子类的析构函数,那么父类的虚构函数必然会被执行。那么当用delete释放一个父类指针所实例化的子类对象时,如果没有定义析构函数,那么将只会调用父类的析构函数,而不会调用子类的虚构函数,导致内存的泄漏。Class Shape{public: virtual Shape(); ~Shape();private: int m_ir;};Class原创 2016-10-14 22:28:11 · 5268 阅读 · 2 评论 -
实例化对象的大小
在用栈实例化对象的过程中,对象内定义的成员函数不占内存空间,也就是说对象的大小取决于对象内定义的数据成员的大小。Class Shape{public: void test(){}};Class Shape1{public: void test(){}private: int m_r;};当用sizeof()计算对象大小的时候,Shape实例化的对象占用的内存为1原创 2016-10-14 22:39:18 · 501 阅读 · 0 评论 -
WINDOWS游戏编程学习笔记(二):完整创建一个窗口
//-----------------------------------【程序说明】----------------------------------------------// 程序名称::GameCore// 2013年3月 Create by 浅墨// 描述:用代码勾勒出游戏开发所需的程序框架//---------------------------------------原创 2016-12-05 16:34:46 · 634 阅读 · 0 评论 -
WINDOWS游戏编程学习笔记(一):Hello Game!
#include<windows.h>#pragma comment(lib,"winmm.lib")using namespace std;//句柄:每个Windows资源都有且独特的身份证 //需要对某个窗口进行操作的话,首先应该得到这个窗口的句柄 //系统创建Windows程序的时候会创建各种各样的资源,给这些资源分配内存的时候返回这些资源的标识号,这些标识号就是句柄。原创 2016-12-04 15:50:49 · 1662 阅读 · 0 评论 -
C++的学习路线以及未来就业趋势
从学习C++到现在已经有四个年头了,但是从来没有很深入学习,有人说C++是面向对象的编程语言,但是我在这里想说的是,C++是一个多泛型的编程语言,它既可以面向过程,比如我们完全可以用C++写C的代码,这是没问题的,它也是一个面向对象的语言,它具有面向对象的特征,可以模拟现实世界中的各种事物;它也是一个泛型编程语言,里面包含大量的模板特性,比如C++的标准库STL就是基于模板的一个库,C++语言的难转载 2016-11-10 13:27:19 · 14957 阅读 · 1 评论 -
C++学习路线自拟
目前在看C++primer,但是感觉这本书真的不适合初学者看。所以打算重新给自己定制一个学习路线。C语言阶段C语言基础 1.C语言语法 2.Linux系统的基本操作与编程基础 3.C基础项目案例:电子词典C语言提高 1.指针 2.接口的封装和设计C语言项目案例 1.提高版电子词典 2.动态库的封装与设计 (Windows版本与Linux版本)C++学习阶段C++基础C++语法基础C+原创 2016-12-02 13:53:21 · 1152 阅读 · 0 评论 -
C++中的map详解
1、map简介map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。2、map的功能自动建立Key - value的对应。key 和 value可以是任意你需要的类型。 根据key值快速查找记录,查找的复杂度基本是Log(N),如果有1000个记录,最多查找10次转载 2016-11-16 13:36:48 · 1825 阅读 · 0 评论 -
使用C++语言模拟实现贪吃蛇小游戏
需求分析: 用C++开发一个能在编译窗口中运行的贪吃蛇小游戏,实现环境为:Microsoft visual C++6.0集成开发环境算法及程序说明:用类构造蛇 [cpp] view plain copy class Snake { public: int转载 2016-10-04 21:19:45 · 1201 阅读 · 0 评论 -
C++的运算符重载
一元运算符重载以++为例:#include <iostream>#include <string>using namespace std;class Stu{ friend Stu& operator++();//前置++的友元函数重载 friend Stu operator++(Stu &stu, int);//后置++的友元函数重载public: Stu(int x原创 2016-10-18 11:09:08 · 259 阅读 · 0 评论