Malinkang's blog

人生最可悲的事情,莫过于胸怀大志,却又虚度光阴。

你好,我是马林康,一名Android开发者。


  1. 《Kotlin实战》读书笔记 第2章 kotlin基础

    2.1 基础要素:函数和变量2.1.1 Hello,world!fun main(args: Array<String>) { println("Hello, world!") } 2.1.2 函数fun main(args: Array<String>) { println(max(1,2)) } fun max(a:Int,b:Int):Int{ return if(a>b) a else b } 表达式函数体函数体 …

    , 继续阅读

  2. 《C++ Primer》读书笔记 第19章 特殊工具与技术

    19.1 控制内存分配19.1.1 重载new和delete19.1.2 定位new表达式19.2 运行时类型识别19.3 枚举类型19.4 类成员指针19.4.1 数据成员指针19.4.2 成员函数指针19.4.3 将成员函数用作可调用对象19.5 嵌套类19.6 union:一种节省空间的类19.7 局部类19.8 固有的不可移植的特性 …

    , 继续阅读

  3. 《C++ Primer》读书笔记 第18章 用于大型程序的工具

    18.1 异常处理18.1.1 抛出异常18.1.2 捕获异常18.1.3 函数try语句块与构造函数18.1.4 noexcept异常说明18.1.5 异常类层次18.2 命名空间18.2.2 使用命名空间成员18.2.3 类、命名空间与作用域18.2.4 重载与命名空间18.3 多重继承与虚继承18.3.1 多重继承18.3.2 类型转换与多个基类18.3.3 多重继承下的类作用域18.3.4 虚继承18.3.5 构造函数与虚继承 …

    , 继续阅读

  4. 《C++ Primer》读书笔记 第17章 标准库特殊设施

    17.1 tuple类型 17.1.1 定义和初始化tupletuple<size_t,size_t,size_t> threeD;//三个成员都设置为0 //为每个成员提供一个初始化值。tuple的这个构造函数是explicit的,因此必须使用直接初始化语法 tuple<string,vector<double>,int,list<int>> someVal("constants",{3.14,2.718},42,{0,1,2 …

    , 继续阅读

  5. 《C++ Primer》读书笔记 第16章 模版与泛型编程

    16.1 定义模版16.1.1 函数模版模版定义以关键字template开始,后跟一个模版参数列表(template parameter list),这是一个逗号分隔的一个或多个模版参数(template parameter)的列表。 template <typename T> int compare(const T &v1,const T &v2) { if(v1 < v2) return -1; if(v2 < v1) return 1 …

    , 继续阅读

  6. 《C++ Primer》读书笔记 第15章 面向对象程序设计

    15.1 OOP:概述面向对象程序设计(object-orented programming)的核心思想是数据抽象、继承和动态绑定。通过使用数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模:使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。 继承通过继承(inheritance)联系在一起的类构成一种层次关系。通常在层次关系的根部有一个基类(base class),其他类则直接或间接地从基类继承而来,而这些继承得到的类称为派生类 …

    , 继续阅读

  7. 《C++ Primer》读书笔记 第14章 操作重载与类型转换

    当运算符作用于类类型的运算对象时,可以通过运算符重载重新定义该运算符的含义。明智地使用运算符重载能令我们的程序更易于编写和阅读。举个例子,因为在Sales_item类中定义了输入、输出和加法运算符,所以可以通过下述形式输出两个Sales_item的和: cout << item1 + item2; 相反的,由于我们的Sales_data类还没有重载这些运算符,因此它的加法代码显得比较冗长而不清晰: print(cout,add(data1,data2)); 14.1 基本概念重载的运 …

    , 继续阅读

  8. 《C++ Primer》读书笔记 第13章 拷贝控制

    13.1 拷贝、赋值与销毁13.1.1 拷贝构造函数如果一个构造函数的第一个参数是自身类类型的引用,且任何额外参数都有默认值,则此构造函数是拷贝构造函数。 class Foo{ public: Foo(); //默认构造函数 Foo(const Foo&);//拷贝构造函数 } 合成拷贝构造函数拷贝初始化参数和返回值拷贝初始化的限制编译器可以绕过拷贝构造函数13.1.2 拷贝赋值运算符与类控制其对象如何初始化一样,类也可以控制其对象如何赋值: Sales_data tra …

    , 继续阅读

  9. 《C++ Primer》读书笔记 第12章 动态内存

    除了自动和static对象外,C++还支持动态分配对象。动态分配的对象的生存期与它们在哪里创建是无关的,只有当显式地被释放时,这些对象才会销毁。 标准库定义了两个智能指针类型来管理动态分配的对象,当一个对象应该被释放时,指向它的智能指针可以确保自动地释放它。 我们的程序到目前为止只使用过静态内存和栈内存。静态内存用来保存局部static对象、类static数据成员以及定义在任何函数之外的变量。栈内存用来保存定义在函数内的非static对象。分配在静态或栈内存中的对象由编译器自动创建和销毁。对于栈 …

    , 继续阅读

  10. 《C++ Primer》读书笔记 第11章 关联容器

    关联容器和顺序容器有着根本的不同:关联容器中的元素是按关键字来保存和访问的。与之相对,顺序容器中的元素是按它们在容器中的位置顺序保存和访问的。 虽然关联容器的很多行为与顺序容器相同,但其不同之处反映了关键字的作用。 标准库提供了8个关联容器,如表11.1所示。这8个容器间的不同体现在三个维度上:每个容器(1)或者是一个set,或者是一个map;(2)或者要求不重复的关键字,或者允许重复关键字;(3)按顺序保存元素,或无序保存。允许重复关键字的容器的名字中都包含单词multi;不保持关键字按顺序存 …

    , 继续阅读