sunwengang blog

developer | android display/graphics

分类 : cpp

C++ 运算符重载、友元、返回对象

运算符重载运算符重载将重载的概念扩展到运算符上,允许赋予C++运算符多种含义。 例如* 用于地址,将获得存储在这个地址中的值;而用于两个数字之间,得到的是乘积。 阅读全文

C++对象和类

类型指定基本类型完成了三项工作: 决定数据对象需要的内存数量 决定如何解释内存中的位(long和float所占位数相同,但是将他们转换成数值的方法不同) 决定可使用数据对象执行的操作和方法 阅读全文

C++头文件、作用域、内存模型和名称空间

单独编译C++提供#include语法,因而可以将程序划分,大致可以分成三部分: 头文件a.h:包含结构声明和使用这些结构的函数原型 源代码文件a.cpp:包含与结构相关的函数的代码 源代码文件b.cpp:包含调用与结构相关的函数的代码 阅读全文

C++内联函数、引用变量、函数重载、函数模板

内联函数 常规函数调用使程序跳到另一个地址(函数的地址),并在函数结束后返回。来回跳跃并记录跳跃位置意味着一定的开销。内联函数使得编译器将相应的函数代码替换函数调用。程序无需跳到另一个位置处执行代码,再调回来。因而,内联函数运行速度比常规函数快,但是代价是需要占用更多的内存。如果程序在10个不同的地方调用调用同一个内联函数,则该程序将包含该函数代码的10个副本。 阅读全文

C++函数模块(函数指针、递归)

本章节主要是围绕函数为圆心,涉及到字符串、指针、C++11特性auto、typedef。由于接触android源码、opengl,需将C++学习一遍,之前只是用过java、c、c#这些。涉及到android源码,例如frameworks/native的surfaceflinger,gui,ui, 以及vender,hardware都是需要仔细的阅读C++代码才能够理解。再如graphics的测量、绘制渲染、硬件加速、合成显示,私以为学习一些图形学是有必要的。人生在勤,不索何获。 阅读全文

C++内存分配方式和模板类vector, array

使用new创建动态结构 在运行时创建数组优于编译时创建数组,对于结构也是如此。需要在程序运行时为结构分配所需的空间,可以使用new完成。动态意味着内存是在运行时,而不是编译时分配的。例如inflatable *ps = new inflatable;其中inflatable是一个结构类型。这句代码将把存储结构inflatable的一块可用内存的地址赋值给ps。箭头成员运算符->,可用于指向结构的指针。例如ps指向一个inflatable结构的成员price,即ps->price 阅读全文

C++复合类型之枚举、指针

枚举enum C++的enum工具提供了另一种创建符号常量的方式,可以代替const。它还允许定义新的类型,但是必须严格按照格式。使用enum语法格式和结构相似,例如 阅读全文

C++复合类型之数组、字符串、结构、共用体

题外话: 在我眼里,我实习的第一家公司教会了我两件事,一是让自己忙起来,二是代码规范整洁。有时候有所悟会很晚,但终究不迟。序: C++提供了基于整型和浮点类型创建的复合类型。影响最深远的复合类型是类。然而,C++还支持几种普通的复合类型。例如,数组 可以存储多个同类型的值。结构 可以存储多个不同类型的值。指针 则是一种将数据所处位置告诉计算机的类型。 阅读全文

C++浮点常量表示、算术运算符、类型转换

浮点常量 默认情况下,8.27和3.4E5这类浮点常量都属于double类型。如果希望常量是float类型,使用f或者F后缀对于long double的类型,使用l和L的后缀 例如: 12341.234f //float2.2L //long double2.34F //float23.231E24 //double (defalut) 阅读全文

C++多字节char、bool、字符常量、浮点数

wchar_t 程序需要处理的字符集可能无法用一个8位的字节表示,比如日文、汉字等此时有两种处理方法: 编译器厂商将char定义16位的字节或者更长 char表示8位的字节,另一种wchar_t表示宽字符类型,可以扩展字符集 阅读全文

C++变量

C++变量命名规则 只能使用字母、数字、下划线 第一个字符不能是数字 区分大小写 不能使用关键字 以两个下划线或下划线和大写字母打头的名称保留给实现(编译器及其使用的资源)使用,以一个下划线开头的名称被保留给实现,用作全局标识符 C++对命名的长度没有限制,但是有些平台会限制长度 阅读全文

C++ 编译和概述

g++编译工具linux编译的四个阶段在Linux下编译程序分为以下4个阶段: 预处理:编译处理宏定义等宏命令(eg:#define)——生成后缀为“.i”的文件    编译:将预处理后的文件转换成汇编语言——生成后缀为“.s”的文件    汇编:由汇编生成的文件翻译为二进制目标文件——生成后缀为“.o”的文件    连接:多个目标文件(二进制)结合库函数等综合成的能直接独立执行的执行文件——生成后缀为“.out”的文件 阅读全文