
C++
Harmin
无无
展开
-
C++程序设计(II)兼谈对象模型(侯捷)—— 15.Reference & 引用的常见用途
Reference &reference 的常见用途参数传递:pass by reference,返回值 return by reference从函数名到 { } 之前都是签名signature的一部分,用来区分两个函数;所以const可以用来区分两个函数const 表示该成员函数不可以修改成员数据,所以该函数隐形的this指针会变成底层const(指向...原创 2020-04-20 01:28:01 · 217 阅读 · 0 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 13. 关于C++标准库 & 14.C++11的三个主题:数量不定的模板参数(参数包),auto和for range循环
关于C++标准库标准库里提供的,我们可以直接使用的就是数据结构(容器)和算法。推荐书籍:Algorithms + Data Structures = Programs仿函数Functors → 算法Algorithms → 迭代器Iterators → 容器Containers都自己用一遍这些容器、算法如何确定自己的编译器是否支持C++11?cout <<...原创 2020-04-19 19:54:45 · 227 阅读 · 1 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 10.模板特化 specialization & 11.偏特化 & 12.模板模板参数
泛化 vs. 特化:比如有一个类是得到两点之间直线,点的坐标类型可以是整数或者浮点数等等,这是泛化。但是,当点的坐标是整数的时候(比如屏幕的像素点),有一种非常快的得到这个直线的办法,这就是特化。模板偏特化 partial specialization —— 个数上的偏特化只能从左到右开始特化,不能跳着偏模板偏特化 partial specialization —...原创 2020-04-18 22:08:20 · 220 阅读 · 0 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 6.namespace经验谈 & 7.类模板 & 8.函数模板 & 9.成员模板
namespace经验谈class template,类模板将某些类型抽出来,允许使用者任意指定据搜索:template<typename T> 和template<classT> 完全一样原创 2020-04-14 01:11:27 · 268 阅读 · 1 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 5.function-like classes
function-like classes,所谓仿函数() 叫 function call operator原创 2020-04-14 01:05:25 · 195 阅读 · 0 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 4.pointer-like classes
为了比指针做更多的事情 C++2.0之前有auto-pointer,2.0之后多了很多指针,如share-pointer pointer-like classes中一定有一个指向某个类的对象的指针原创 2020-04-14 00:46:20 · 200 阅读 · 0 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 2.转换函数 conversion function & 3.non-explicit-one-argument ctor
转换函数 conversion function通常都会是const 不一定是基本类型,可以是string等 例子:分数 转换成 doubleclass Fraction{public: Fraction(int num, int den = 1) : m_numerator(num), m_denominator(den) { } operator double(...原创 2020-04-11 17:36:14 · 263 阅读 · 0 评论 -
C++程序设计(II)兼谈对象模型(侯捷)—— 1.导读
上一门课“面向对象程序设计”的续集——细节深入目标继续 正规、大气 模板:泛型(Generic)编程 和 面向对象编程 是 c++技术主线 深入探索面向对象之继承关系所形成的对象模型,包括底层的this指针、vptr虚指针、vtbl虚表、虚机制、以及虚函数造成的polymorphism多态效果。...原创 2020-04-11 01:19:18 · 189 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 11&12.继承 & 复合 & 委托 & 虚函数与多态 & 委托相关设计
Object Oriented Programming(OOP), Object Oriented Design (OOD)Inheritance (继承),表示 is-astruct也是一种class 父类的成员,子类可以继承构造和析构 构造:先父类(默认构造函数)后子类 析构:先子类后父类析构函数 父类析构必须时virtual,否则会出现undefined behav...原创 2020-04-09 20:41:22 · 304 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 10.扩展补充:类模板,函数模板,及其他
static 静态类中的static成员和成员函数一样,都只有一份 但是该成员函数处理的哪个对象,靠this pointer来确定 complex c1; cout << c1.real(); 相当于c中的 cout << complex::real (&c1); 加了static的成员变量:和对象就脱离了;所有对象的该数据都一样,就弄成静态的;...原创 2020-04-09 15:40:24 · 284 阅读 · 0 评论 -
C++ —— c++面试(校招)的可能问题
C++比较考验基础,因为C++不存在很通用的框架。一般会问这些:1,语言基础,比如static关键字,类型转换,多态机制,类实例的初始化及大小,拷贝语义和移动语义等;2,内存管理&&资源管理,RAII和智能指针,可能还有池技术之类的;3,STL,最常见的容器和容器适配器,考查数据结构相关知识,深入点会考察内存分配实现,再深入估计就是类型萃取之类的模板编程了;4,如果...转载 2020-04-09 14:53:29 · 602 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 9.复习String类的实现过程
class声明#ifndef __MYSTRING__ // 0.防卫式声明#define __MYSTRING__#include <string.h>#include <iostream>using std::ostream;using std::strcpy;using std::strlen;class String // 1.class ...原创 2020-04-09 01:21:46 · 242 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 8.堆、栈与内存管理
Stack 栈是存在于某个作用域scope的一块内存空间memory space。 例如当你调用函数,函数本身会形成一个stack用来放置它所接收的参数,返回地址,以及局部变量。 在函数本体function body内声明的任何变量,其所使用的内存都取自上述stack Complex c1(1,2); stack objects的生命周期:作用域内,又称为auto object,会被自...原创 2020-04-09 01:05:57 · 164 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 7.三大函数:拷贝构造函数,拷贝复制函数,析构函数
Class with pointer member(s) —— string 目标:int main() { String s1(); String s2("hello"); String s3(s1); // 拷贝构造函数 cout << s3 << endl; s3 = s2; // 赋值运算符重载 cout << s3 <<...原创 2020-04-08 01:38:48 · 224 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 6.complex类实现
回顾 设计一个class需要注意:构造函数中对参数使用 冒号 : 初始化 成员函数该不该加const,如果不加可能有什么副作用? 传参数尽量 pass by reference,加不加const? 返回的时候 return by what?const or not 数据一般放在 private,函数一般 public...原创 2020-04-07 14:06:38 · 416 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 5.操作符重载与临时对象
operator overloading(操作符重载-1, 成员函数) this理解操作符重载,如 c2 += c1: c2是左值,c1是右值,+=作用在c2上 如果左边的类型定义了这个操作,编译器就可以找到并且调用 注意 所有成员函数隐藏了一个参数,this,谁调用这个函数,this就指向谁 return by reference語法分析 传递着不需要知道接收者以r...原创 2020-04-07 01:43:26 · 219 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 4.参数传递和返回值
const member function 常量成员函数说明该函数不会改变成员数据的内容 当该成员函数不会改变data时,一定要记得加const const类型的类对象,只能调用const的成员函数class complex{public: double real () const { return re; } //const double imag () cons...原创 2020-04-07 00:38:52 · 293 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 3.内联函数、构造函数
inline 内联函数定义:函数若在class body内定义完成,便自动成为inline候选人,像宏(Macro)一样,有特性,无缺点。 特性: 如果称为函数成为内联函数,运行比较快; 编译器决定最后是不是inline,太复杂则拒绝inline inline这是对编译器的建议,编译器是否采纳未知 为了解决频繁调用的小函数大量消耗栈空间(栈内存)的问题 并不一定要在clas...原创 2020-04-06 22:19:41 · 234 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 2.头文件与类的声明
Object Based (基于对象) vs. Object Oriented (面向对象)Object Based:单一class的设计 Object Oriented:多重class的设计,class与class之间的关系C++代码的基本形式C vs. C++关于数据和函数 C的函数用来处理数据 根据数据类型可以创建变量 任何函数都可以处理你的数据 C的数...原创 2020-04-05 00:41:07 · 355 阅读 · 0 评论 -
C++面向对象高级编程(侯捷)—— 1.C++编程介绍
0、 课程目标编程习惯:正规、大气 Object Based (基于对象):良好的方式编写C++ class class withpointer members —— String class without pointer members —— Complex Object Oriented (面向对象):学习class之间的关系 —— oop 继承 inheritance...原创 2020-04-04 23:01:10 · 191 阅读 · 0 评论 -
C++ —— C/C++程序的编译过程
0. 流程概览编译流程:预处理 → 编译 → 汇编 → 链接 详细 → 源代码(source code).c / .cpp 预处理器(processor)→ ? 编译器(compiler)→ 汇编代码(assembly code).s 汇编器(assembler)→目标程序(object code).o /.obj 链接器(linker) → 可执行程序(executa...原创 2020-04-04 00:11:43 · 235 阅读 · 0 评论 -
C++ —— 编译过程 & 内存
内存分区模型:代码区:存放程序的二进制代码,OS管理; 全局区:存放全局变量和静态变量以及常量; 栈区:编译器自动分配和释放,存放函数的参数和局部变量、局部常量; 堆区:程序员分配和释放,如果程序员不释放,程序结束时候操作系统回收;内存分区的意义:不同区域存放的数据,有不同的生命周期,灵活;程序运行前:.exe文件中分为两个区域,代码区和全局区代码区: 存放CPU执...原创 2020-04-01 20:07:53 · 137 阅读 · 0 评论 -
C++ —— 多态 & 虚函数
多态含义:给不同的对象发送同一种消息,获得不同的结果或者产生不同的行为。如:重载,虚函数等虚函数:使用 基类的指针,指向 派生类,调用虚函数的时候调用的是派生类的虚函数。但是,如果基类的函数声明不是虚函数,那么不同子类的基类指针调用的还是基类的虚函数。...原创 2020-04-01 17:19:06 · 165 阅读 · 0 评论 -
C++ —— 继承
先说一下类的成员访问限定符:public:类的外部可以访问; private:只能该类自己和友元可以用; protected:只有该类自己和子类和友元可以用;继承的方式:public: 父类中,public和protected在子类中的访问属性保持不变; 父类中,private在子类中无法访问,即使是共有成员函数也不行; protected: 父类中,public和pr...原创 2020-04-01 14:50:25 · 118 阅读 · 0 评论