之前对c++只是耳闻而没有接触过,最近在公司做的iOS项目是以c++作为数据层的,所以必须要学习c++。之前这篇博客在oschina发布过了,但是那个账号也同时也有iOS的一些总结的东西,所以有点乱,我也不会整理目录结构,所以直接把那边的文章转移到这边发布了。
1、Objective-C与C++混编
设置项目:Build Settings->Apple LLVM 5.0-Language->Compile Source As,选择Objective-C++,这样就可以在项目中编写C++代码了。
2、导入标准输入输出库
#include <iostream>
导入这个库就可以进行一些输入输出操作了,以输出举例说明,先写好输出的语法,然后再填充想要输出的数值,
语法:std::cout<<<<std::endl;
(1)如果我想输出"Hello World"字符串,那么在左尖括号中间加上该字符串,
std::cout<<"Hello World"<<std::endl;
(2)定义一边变量variable,我想输出"variable is : 7"
int variable = 7;
std::cout<<"variable is: "<<variable<<std::endl;
其实想明白这个语句的原理,写起输出代码也就没有那么纠结了。
20140409
3、变量初始化
变量定义制定了变量的类型和标识符,也可以为对象提供初始值。定义时指定了初始值的对象被称为是已初始化的。C++支持两种初始化变量的形式:复制初始化和直接初始化,复制初始化语法用等号(=),直接初始化则把初始化放在括号中,
int val1(1024);//直接初始化-direct initialization
int val2 = 1024;//复制初始化-copy initialization
在C++中“初始化不是赋值”,初始化指创建变量并给它赋初始值,而赋值则是擦出对象的当前值并用新值代替。直接初始化语法更灵活,效率更高。
4、string初始化的几种方式
(1)std::string titleA = "C++ Primer,Ed";
(2)std::string titleB("C++ Primer,Ed");
(3)std::string all_nines(10,'9');//all_lines is "9999999999",使用字符和计数器初始化。
其实就是使用多个不同的构造函数初始化对象。
5、声明和定义
定义:变量的定义用于为变量分配存储空间,还可以为变量指定初始值,在一个程序中,变量有且仅有一个定义。
声明:声明用于想程序表明变量的类型和名字。定义也是声明:当定义变量时我们声明了它的类型和名字。可以通过extern关键字声明变量名而不定义它。不定义变量的声明包括对象名、对象类型和对象类型前的关键字extern,
extern int i;//声明变量,但是没有定义
int i;//定义变量,同时也是声明
extern声明不是定义,也不分配存储空间,它只是说明变量定义在程序的其他地方。程序中变量可以声明多次,但只能定义一次。
只有声明也是定义时,声明才可以有初始化(PS:这里有点饶人,定义一定是声明,而声明不一定是定义),因为只有定义才分配存储空间。初始化必须要有存储空间来进行初始化,如果声明有初始化式,那么它可被当做是定义,即使声明标记为extern,
extern double pi = 3.1415926;//这时候声明是定义
只有当extern声明位于函数外部时候,才可以含有初始化式,例如下面的代码是在main函数之外使用声明并初始化PI对象,
extern double PI = 3.1415926;
int main(int argc,char *argv[])
{
return 0;
}
因为已经初始化的extern声明被当做是定义,所以该变量任何随后的定义都是错误的,看下面的代码
extern double PI = 3.1415926;//声明并初始化,相当于定义
double pi;//错误,不能再次定义PI对象
同样,随后的含有初始化式的extern声明也是错误的,
extern double PI = 3.1415926;//声明并初始化,相当于定义
extern double PI;//正确,声明了但是没有定义对象
extern double PI = 3.1415926;//错误,重复定义对象PI
总结:声明和定义之间的区别看起来可能微不足道,但事实上却是举足轻重的。在C++语言中,变量必须仅能定义一次,而且在使用变量之前必须定义或声明变量。
任何在多个文件中使用的变量都需要有余定义分离的声明。在这种情况下,一个文件含有变量的定义,使用该变量的其他文件则包含该变量的声明(而不是定义)。
个人感悟:
对于上面提到的一些细节方面,比如直接初始化和赋值初始化、以及声明和定义的区别,还是要慢慢领悟的。对于这些基础的概念,可能在编码的时候使用的不多,但是对于深层次的理解一种语言的特性还是很有帮助的,日积月累、厚积薄发,总有一天会体会到这种修炼内功的好处。