C++语言- 基础知识总结1

大学刚毕业那会我因为专业的原因有一年多的C/C++ linux MFC方面的编程经验,后来被iOS系统所吸引,就转作iOS了,当时主要是被它绚丽,流畅的系统所吸引,还有一个原因当然是钱了,呵呵。最近打算学习一下ffmpeg,opengl,所以想再次拾起C/C++。语言其实都是相通的,尤其是做过,我想应该可以很快上手。学习能力是我们程序员的一个强项嘛,哈哈。个人觉得呢,任何一门语言或是一个方向,入门都是比较简单的,但是想深入做好都是需要下功夫的。不过相对而言,我觉得iOS编程想对C/C++还是简单很多。个人认为主要表象以下两点:

  1. 就语言本身而言:Objective-c 没有C++语言复杂,例如Objective-c是单继承的,C++是多继承的。Objective-c没有抽象类,C++有抽象类等。
  2. 就平台而言:Objective-c 主要运用于苹果相关平台(Macos watchos tvOS iOS),所以苹果提供了强大的系统库和各种牛逼的系统框架,以及很多应用层的牛逼的开源的第三方框架。所以用它来实现一个绚丽的功能非常简单,例如:动画。c++是一个跨平台的语言,可以运用于很多平台。但是它在所有平台都可以用的只有一些跟语言本身紧密结合的系统库,以及一些特殊领域的一些开源框架。如音视频领域的 opengl。

所以Objective-c 主要运用于苹果相关平台(Macos watchos tvOS iOS),编程相对比较简单,因为很多牛逼的功能苹果和很多业界大牛已经帮我们做好了。c++可以运用于很多平台,但是编程相对比较难,难在除了语言本身之外,还有就是许多的功能需要我们自己实现。

下面进入正题,来看看C++的一些基础知识吧。

我觉得任何一门语言,在语言本身的知识点上都有共性:如:变量类型,数据类型,变量的作用域,类型修饰符,运算符,字符串的处理等,还有面向对象语言的三大特性:封装,继承,多态。
下面我们就从这些知识点开始学习吧。

变量类型

bool : 存储值为true或false

char : 通常单个字节(一个字节)。这是一个整数类型

int : 整数是机器上最自然的存储尺寸大小

float : 单精度浮点值

double : 双精度浮点值

void : 表示空类型

wchar_t : 宽字符类型

C++也允许定义各种其他类型的变量,像枚举,指针,数组,引用,数据结构和类等;

作用域
  1. 局部变量:这是一个函数或块内声明的变量,它们只能由属于该函数或代码块内部的语句中使用。
  2. 全局变量:全局变量在所有函数外定义,通常在程序的顶部。全局变量将持有整个项目的生命期值。全局变量可以被任何函数访问。也就是说,全局变量可以在整个程序它的声明之后使用。
数组

c++中数组和Objective-c不一样,c++中数组中可以存基本类型也可以存对象(指针),但是数组中的对象必须是类型一致。Objective-c中只能存对象,但是可以存不同类型。

如:

double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double balance[] = {1000.0, 2.0, 3.4, 17.0, 50.0};
字符串

在任何语言中字符串处理都是很大,很常用的一块。

  1. C风格的字符串:
//声明并初始化
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
char greeting[] = "Hello";

操作:

strcpy(s1, s2); 复制字符串s2到字符串s1

strcat(s1, s2);连接字符串s2到字符串s1的末尾

strlen(s1); 返回字符串s1的长度

strcmp(s1, s2);返回值为0,s1和s2是相同的; 如果s1<s2返回小于0;如果s1>s2 返回大于0

strchr(s1, ch);返回一个指针,指向字符串s1中第一次出现字符ch

strstr(s1, s2);返回一个指针,指向字符串s1中第一次出现的字符串s2

  1. C++的String类:
//声明并初始化
   string str1 = "Hello";
   string str2 = "World";
   
指针

指针是一个变量,其值是另一个变量的地址。就像变量或常量,必须声明一个指针,然后才能使用它。

//声明:
int    *ip;    // point to an integer
double *dp;    // point to a double
float  *fp;    // point to a float
char   *ch     // point to character

//使用
#include <iostream>

using namespace std;

int main ()
{
   int  var = 20;   // actual variable declaration.
   int  *ip;        // yiibaier variable 

   ip = &var;       // store address of var in yiibaier variable

   cout << "Value of var variable: ";
   cout << var << endl;

   // print the address stored in ip yiibaier variable
   cout << "Address stored in ip variable: ";
   cout << ip << endl;

   // access the value at the address available in yiibaier
   cout << "Value of *ip variable: ";
   cout << *ip << endl;

   return 0;
}

//结果

Value of var variable: 20
Address stored in ip variable: 0xbfc601ac
Value of *ip variable: 20

在C++语言中有几个重要概念,我们后面博客中讨论:

Null 指针 C++中支持null指针,这是一个常数为零在几个标准库中定义的值

指针运算 有一些可以对指针使用四则运算符: ++, --, +, -

指针VS数组 有指针和数组之间有密切的关系。

指针数组 可以定义数组来存储一些数字的指针

指针的指针 C++可以让指针指向指针

传递函数指针 通过引用或地址传递参数均使传递的参数将在调用函数被调用函数改变

引用

c++中有个重要概念叫引用:
引用也就是别名,也就是为另一个已经存在的变量起了个别名。它与指针很相似但是又很不同:

  • 不能有NULL引用。必须始终能够保证一个引用连接到一个合法的一块存储。
  • 一旦引用被初始化为一个对象,它不能被改变为引用另一个对象。指针可以在任何时候指向另一个。
  • 在创建时引用必须初始化。指针可以随时进行初始化。
//创建
int    i = 17;
int&    r = i;
//使用
#include <iostream>
 
using namespace std;
 
int main ()
{
   // declare simple variables
   int    i;
   double d;
 
   // declare reference variables
   int&    r = i;
   double& s = d;
   
   i = 5;
   cout << "Value of i : " << i << endl;
   cout << "Value of i reference : " << r  << endl;
 
   d = 11.7;
   cout << "Value of d : " << d << endl;
   cout << "Value of d reference : " << s  << endl;
   
   return 0;
}

//结果
Value of i : 5
Value of i reference : 5
Value of d : 11.7
Value of d reference : 11.7

在C++中引用通常用于函数参数列表和函数返回值。

C++基本输入/输出

C++标准库提供一套广泛的输入/输出功能,我们先来看看最常见的I/O操作。

C++ 的I/O发生在流,这是字节序列。如果字节从设备流向如键盘,磁盘驱动器,或网络连接等,以主存储器,这就是所谓的输入操作,如果字节从主存储器流到设备等的显示屏幕,打印机,磁盘驱动器或网络连接等等,这就是所谓的输出操作。

  1. I/O库头文件:
  • <iostream> 此文件定义cin, cout, cerr 和 clog 对象,分别对应于标准输入流,标准输出流中,无缓冲标准错误流和缓冲标准错误流
  • <iomanip> 该文件声明服务,所谓的参数化流操纵,如setw和setprecision进行格式化I/O
  • <fstream> 该文件声明服务用户控制文件处理。我们将详细的文件一下讨论和Stream相关章节
  1. 标准输出流 (cout):

预定义的对象cout是ostream的类的实例。该cout对象被说成是“连接到”标准输出设备,这通常是在显示屏幕上。 cout用于在结合流插入操作符,它被写成<< 。

//使用
#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Hello C++";
 
   cout << "Value of str is : " << str << endl;
}
//结果
Value of str is : Hello C++
  1. 标准输入流 (cin):
    预定义对象cin 是istream类的一个实例。cin对象被认为是连接到标准输入设备,这通常是键盘。cin用于与流提取运算符,它被写成>>。
//使用
#include <iostream>
 
using namespace std;
 
int main( )
{
   char name[50];
 
   cout << "Please enter your name: ";
   cin >> name;
   cout << "Your name is: " << name << endl;
 
}
//结果
Please enter your name: cplusplus
Your name is: cplusplus
  1. 标准错误流(cerr):
    预定义的对象cerr是ostream类的一个实例。cerr对象被认为是附着到标准错误设备,这也是一个显示屏幕,但是在对象cerr是无缓冲和每个流插入到cerr导致其输出立即显示。

cerr 也用于与该流的插入操作者一起作为显示在下面的例子。

//使用
#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Unable to read....";
 
   cerr << "Error message : " << str << endl;
}
//结果
Error message : Unable to read....
  1. 标准的日志流(clog):
    预定义的对象clog是ostream 类的一个实例。clog对象被连接到标准错误设备,这也是一个显示屏幕,但是在对象clog被缓冲。这意味着,每个插入堵塞会导致其输出到在缓冲器被保持到缓冲区填满或直到缓冲器被刷新。

clog也被用于与此流的插入操作者一起作为显示在下面的例子。

//使用
#include <iostream>
 
using namespace std;
 
int main( )
{
   char str[] = "Unable to read....";
 
   clog << "Error message : " << str << endl;
}
//结果
Error message : Unable to read....
以上只是个人的总结,可能有误,敬请各位大神指点,谢谢。

未完持续更新中待续。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容