《附录D》
C++入门
可以在同一个.cpp文件中实现多个类,也可以把一个类的实现分散到多个.cpp文件中
int main(int argc, char *argv[]) //argc:argument count,argv:argument value
Argv[0]存放程序的名字,argv[1]、argv[2]、......、argv[argc-1]存放命令行参数
头文件(header file): 将函数原型放到一个单独的文件中,在需要调用这个函数的所有编译单元中包含该文件。
形式:
#ifndef XXX_H #define XXX_H ...... #ENDIF
#include<XXX>:尖括号表明头文件XXX位于系统的标准位置
#include”XXX”:在当前目录下查找头文件XXX
头文件不是编译单元,不会产生目标文件,只包含一些让不同编译单元能够相互联系的声明。
可执行程序 连接很多库
静态库:可直接放进可执行程序(就像目标文件一样)
动态库:(共享库/DLL) 位于用户机器的标准位置,在应用程序启动时自动加载
基本数据类型
内置类型的实例不会默认初始化。
Qlonglong、QChar
QDataStream类用于存储与平台无关的二进制数据
类
类划分为三段:public、protected、private 没有定义段则默认为private段
内联函数(inline)调用一个声明为内联函数的函数时,编译器只是简单的扩展其函数体,不会生成实际的函数调用==>(更快速)
只有非常简短的函数才应该实现为内联函数
C++没有为所有的类提供一个可以继承出来的一般类Object
纯虚函数 == “接口”
C++不允许在类定义中初始化成员变量
类变量、实例变量
每一个静态成员变量都必须定义在.cpp文件中
指针
堆(heap)
栈(stack)
悬摆指针(dangling pointer) “智能”指针:QPointer<T>
类的常量指针只能用于调用常量成员函数
Qt中“写时复制”(copy on write)
引用
C++中的引用存储一个对象的地址,与指针的不同在于:
1. 声明:使用“&”而不是“*”;
2. 必须初始化,后面不能再次被重新赋值;
3. 可直接访问与引用相关联的对象;
4. 不能为空(null)
数组
std::memcpy() 可以复制一块内存中的数据
创建可变大小数组:
1. 动态分配该数组
2. 使用std::vector<T>类
#include<vector> std::vector<int> array(n);
3. 使用Qt的QVector<T>类
#include<QVector> QVector<int> array(n);
模板类:在类名字中包含<>的类
字符串
C++中,字符串的文字是以隐式“\0”结束符结尾的简单常量字符数组
QString
枚举
有时,枚举用于声明整型常量,这时通常忽略枚举的名字:
Enum{ Monday = 1; }
又有时,枚举用于表达选项的集合,用一个以2的幂次方为值的枚举常量来表示各个选项,每个选项通常被称为“标记”(flag),可以使用按位运算符“|”或“|=”来组合这些标记,可以用按位运算符“&”测试是否选中了某个标记。
类型别名
类型转换
Static_cast<T>() 将指向A的指针转换为指向B的指针,类B必须为类A的子类
Dynamic_cast<T>() 运行时类型信息(RTTI,runtime type information)验证
Const_cast<T>() 添加/移出对指针或引用的const限定
Reinterpret_cast<T>() 将任意类型的指针或引用转换为任意的其他类型
数据类型 void * 可以存储任意类型的实例的地址
关键字explicit 用于禁用自动转换功能
运算符重载
值类型
值类型(value type)、引用类型(reference type)
C++中所有类型都可用作“引用类型”
如果要让某个C++类具有可复制性,必须保证类有一个复杂构造函数(copy constructor)和一个赋值运算符。在定义一个类时C++编译器会自动提供一个复制构造函数和一个赋值运算符,用于执行成员到成员的复制。
全局变量和全局函数
未完待续。。。。
本文出自 “V脸” 博客,请务必保留此出处http://xuzhen1024.blog.51cto.com/8881317/1620381
原文:http://xuzhen1024.blog.51cto.com/8881317/1620381