总感觉学计算机不该只关注计算机技术,结合计算机技术做一些跨领域
的事情会更有意义。计算机视觉是一个不错的方向,鉴于图像处理一般用C++的场景比较多,决定先从C++入手。

预备知识

熟悉C、Java、Python任意一门语言,了解编程语言的通用特性:数据类型、流程控制、函数、面向对象、文件IO、网络。

一. C++的语言特性

1 初始化方式,C++支持赋值符号=之外的初始化方式。

int a = 1024;
string a = "aaa"
int a[5] = [0,1,2,3,4]int a(1024) // 新的赋值方式
string a("aaa")
int a[5]{0,1,2,3,4}
vector<int> iv{1, 2, 3};
map<int, string>{{1, "a"}, {2, "b"}}

2 类型推测与空指针

  • C++11中可以自动推到数据类型,建议使用类型推导,关键字为auto

  • 类型反推特性。类似于auto的反过程。

  • 使用nullptr来代替NULL,使空指针的意义更加明确。

auto* p = new Person();int a = 10;
decltype(a) b = 20 ; // 类型检测int* p = nullptr;

3 for迭代器与lambda表达式

  • 使用for可以进行for…in遍历
  • 使用lambda函数,形式为 =-> 函数体
// 类似于java,使用for...in进行迭代
map<string, int>  m{{'name',12}, {'age',14}};
for(auto p: m){
    cout <<
}auto func = [=](int& a)-> {reutrn a+10};
auto func = [b](int& a)-> {reutrn a+10};
// 中括号中等号表示lambda中能范围所有全局变量
// 中括号中b,表示lambda中能访问外围b

4 引用、指针与const

  • 引用相当于取别名

  • 指针表示内存地址

  • const修饰在谁的前面,谁就是不可变的。

    const int* p = 10; // 常量的指针,*p不能被重新赋值int a = 999;int* const p =  & a; // 指针常量,表示指针p不能被重新赋值

5 进制转换

    using namespaceint a = 10;int b;cout << 'hex' << a;cout << 'oct' << a;cout << 'bin' << a;

6 字符串与整型的互相转换

借助于sstream

#include <sstream>stringstream ss();
int a = 10;
ss << a;return ss.str()

二. C++面向对象之封装性

类的结构
C++中完整类的定义一般是分文件写的,例如Person类有Person.h和Person.cpp组成,.h文件负责定义属性和方法(类似接口,只定义不实现),而.cpp文件对.h文件中的定义的方法进行实现。

//  #### Person.h
class Person {
private:string name;int age;string gender;public:Person(); // 构造~Person() // 析构Person(const Person& ); // 拷贝构造函数string toString();
}// #### Person.cpp 实现头文件中定义的方法
Person::Person(){cout << "构造函数"
}~Person::Person(){cout << "析构函数"
}string Person::toString(){return this -> name;
}

对象的初始化

C++中初始化方式有两种:从堆中初始化和从栈中初始化。从堆中初始化需要手动去申请内存,从栈中初始化时系统自动管理内存。

构造函数初始化列表
构造函数在实现时,可以通过初始化列表对象的成员进行赋值。

// Person.h
class Person{
private:string _name;int _age;
public:Person(string name, int age);toString():
}//Person.cpp#include "Person.h"#include <iostream>using namespace std;Person::Person(string name, int age):_name(name),_age(age){
}Person p('hk', 10); // 初始化对象

深拷贝、浅拷贝与拷贝构造函数
通过赋值、传值、初始化参数得到的对象均会调用拷贝构造函数,默认拷贝构造函数只会做浅拷贝,如果需要深拷贝,需要在拷贝构造函数中进行处理。


Person p('hk', 12);
Person p_1(p); // 调用拷贝构造
auto p_2 = p_1; // 调用拷贝构造
// 通过传值传递如函数的对象、通过return在函数中返回的对象,均会调用拷贝构造。// 当对象有对象类型的成员,则需要进行深拷贝class Point{
private:int _x;int _y;
public:
Point(int x, int y):_x(x),_y(y){}
}class Line{
private:int _count;Point _p;
public:Line(x,y,count):_count(count){_p(x,y); //实例化Point对象}
}// 针对Line对象,其中包含对象成员Point,在需要深拷贝的场景下,默认拷贝构造无法满足需求,需要特殊定义。Line(const Line &cp_line){cp_line.count = this -> count;
//  cp_line.p = this. -> p;  //只能实现浅拷贝cp_line.p = Point p(this->x, this->y); // 深拷贝
}

在C++对象中直接返回this代表的对象时,也会触发拷贝构造,因此返回的并不是原对象,而是一个新对象。

二. C++面向对象之继承性

C++中调用父类方法的写法(同样适用于调用父类构造函数)

class Person{
private:string name;int age;
public:Person(string name, int age):name(name), age(age){}void say(){cout << "Hello world!";}
}// 继承的写法
class Female:public Person{
private:bool longhair;
public:// 构造函数通过:符号调用父类构造,通过longhair初始化本类参数Female(string name, int age, bool longhair):Person(name, age), longhair(longhair){}void action(){// 关于父类的调用,java用super,C#用base,而C++用父类的名字Person::say(); // 通过这样的方式调用父类的方法}
}

C++ 快速学习(一)相关推荐

  1. 业余快速学习虚幻引擎教程

    仅用5小时学会虚幻引擎! 你会学到什么 专为希望在业余时间打造虚幻引擎技能的艺术家和开发人员量身定制的专业技术 从几何图形到材料,从照明到互动,所有方面的提示 探索如何创造建筑水的效果 如何使用顶点绘 ...

  2. 零基础快速学习Java技术的方法整理

    在学习java技术这条道路上,有很多都是零基础学员,他们对于java的学习有着很多的不解,不知怎么学习也不知道如何下手,其实Java编程涉及到的知识点还是非常多的,我们需要制定java学习路线图这样才 ...

  3. 怎样快速学习html5,如何快速学习HTML5?带你了解HTML5学什么?

    今天小编要为大家分享的文章是关于如何快速学习HTML5?HTML5主要学些什么的文章.近年来前端开发非常热门,前端开发工程师也很稀缺,于是很多人将其视为高薪行业的代名词.HTML5前端开发工程师被称作 ...

  4. 新手搭ssm要多久_如何快速学习ssm 框架?

    要快速学习SSM框架,你需要一套学习曲线平滑的教程 1. 很快可以看到效果 SSM框架这种教程的,在百度或者git上一搜一大把,不过很遗憾,大部分你照着上面的流程做,是做不出来的,要么缺少包,要么配置 ...

  5. MySQL主从原理,基于快速学习一门技术的3种方式!

    根据经验,想要快速学习一门技术有3种方式. 第一种方式是通过代码来理解它的实现,反推它的逻辑. 这种方式的难度很大,而且起点相对高,能够沉浸其中的人非常少,过程相对来说是苦闷的,但如果能够沉下心来看代 ...

  6. 如何自学python爬虫-小白如何快速学习Python爬虫?

    原标题:小白如何快速学习Python爬虫? 很多同学想学习 爬虫 ,对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情.而且爬虫是入门 Python 最好的方式,没有之一. 我们可以通过爬虫获取 ...

  7. 自学python方法-总算懂得快速学习python的方法

    随着Python的进一步发展,越来越多的现成的Python的机器学习的算法已经发布出来.为了可以更好地运用这些机器学习的算法,我们有必要对Python有个初步的了解.以下是小编为你整理的快速学习pyt ...

  8. HBase应用快速学习

    HBase是一个高性能.面向列.可伸缩的开源分布式NoSQL数据库,是Google Bigtable的开源实现. HBase的思想和应用和传统的RDBMS,NoSQL等有比较大的区别,这篇文章从HBa ...

  9. jQuery快速学习

    jQuery快速学习 1.$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的代码,因为我们在执行代码的时候,可能会依赖页面的某一个元素,我们 ...

  10. 有 OC 经验的程序员快速学习 Swift 语法

    前言 苹果官方推出 Swift 语言至今,已经过了 7 年之久,Swift 也更新到了 5.5 版本, 它的语法和 API 也趋向于稳定.最近闲来无事,决定开始研究这 iOS 开发编程语言的语法.因为 ...

最新文章

  1. 基于深度学习的位姿估计方法
  2. springboot-web开发(静态资源)
  3. 数据结构实验之二叉树六:哈夫曼编码
  4. 成功解决 ValueError: feature_names mismatch training data did not have the following fields
  5. centos安装python3.7.0过程记录
  6. Ehcache学习总结(2)--Ehcache整合spring配置
  7. 语音识别,搜狗的下一个大梦想?
  8. 04 高等数学专题——向量代数和空间解析几何
  9. Linux空白行:行号显示、空白行数统计、删除空白行
  10. 26岁零基础想转行做软件测试可行吗?多方面分析
  11. 如何评价电影《西游记之大圣归来》?
  12. 是的你没看错,js生成word文档
  13. 阿里云2022年双十一活动各云产品新购和续费优惠政策汇总
  14. html是一种网页设计语言,html网页设计教程
  15. STM32CUBEMX驱动lcd1602,使用的是stm32f103c8t6芯片
  16. Linux 系统进程、线程之间的爱恨纠葛
  17. 【unity shader】unity游戏特效-仿《黑暗欺骗》模型消融消失效果
  18. AC日记——整理药名 openjudge 1.7 15
  19. Bentley-Ottmann算法:求N条线段的交点
  20. 安装资源包后出现的错误信息解决办法

热门文章

  1. Hadoop02---HDFS基础(HDFS原理 java客户端).md
  2. C++中使用map时,it->second是什么意思?
  3. Warning: componentWillMount has been renamed, and is not recommended for use
  4. java 适配器_java适配器
  5. 操作系统-------OS概述
  6. linux内核机制之设备树
  7. Python(大蟒蛇)与云计算
  8. 25人赛跑问题-得出前三名
  9. KiCAD电路仿真入门
  10. 【面试题4】谈谈以前端角度出发做好SEO需要考虑什么?