C++基础一01

 一、C++语言概述

1 历史背景

1)C++的江湖地位java、C、C++、python、C#

2)C++之父:Bjarne Stroustrup(1950--)

     1979,Cpre,为C语言增加类的机制

     1983,发布全新编程语言 C with class,后来命名为C++

     1985,CFont1.0 《The C++ Programming Language》

3)C++发展过程

1987,GNU C++

1990,Borland C++(BC编译器)

1992,Microsoft C++(VC编译器)IBM C++ ...

1998,ISO C++98

2003,对C++98进行修订,C++03

2011,ISO C++11/C++0x

2014,ISO C++14

2017,ISO C++17*

2020 C++20

2 应用领域

1.游戏开发 

2.科学计算 

3.网络通信(ACE)

4.操作系统和设备驱动

5)其它...

3 C和C++

1)都是编译型语言

2)都是强类型语言,但是C++更强

3)C++很大程度上兼容C,但是去掉了C中一些不好的特性

4)C++增加许多C中不具备的好的特性,比C程序更适合大型软件的开发


二 第一个C++程序

1 编译方式

1)gcc xx.cpp -lstdc++

2)g++ xx.cpp //推荐

2 文件扩展名

1).cpp //推荐

2).cxx

3).cc

4).C

3 头文件

//包含标准C++中所有和I/O相关的类型、对象和函数

#include<iostream>

注:在C++中标准C的头文件依然可以使用

#include<stdio.h>==> #<cstdio>

#include<stdio.h>==> #include<cstdlib>

#include<stdio.h>==> #include<cstring>

...

4 标准输入和输出

1)cin对象表示标准输入//类似scanf

eg:

int num;

scanf("%d",&num);//c中

cin >> num;//c++中

其中“>>”称为提取操作符

----------------------------

int i;

double d;

scanf("%d%lf",&i,&d);//C

cin >> a >> d;//C++

2)cout对象表示标准输出//类似printf

eg:

int num = 1234;

printf("num=%d\n",num);//C

cout << "num=" << num << endl;//C++

其中"<<"称为插入操作符

注:endl==>“\n”

----------------------------------

int i = 100;

double d = 3.14;

printf("%d,%lf\n",i,d);

cout << i << ',' << d << endl;

5 "std::"标准名字空间

  C++标准库中的所有函数、变量、类型都是在std空间中

三 名字空间(namespace)

1 名字空间作用

1)避免名字冲突

2)划分逻辑单元

2 定义名字空间

namespace 名字空间{

名字空间成员1;

名字空间成员2;

...

名字空间成员n;

}

注:名字空间成员可以是全局变量、函数、类型、名字空间

eg:

namespace ns1{

int num = 100;

void func(...){...}

struct Student{...};

namespace ns2{...};

}

3 名字空间成员的使用

1)通过作用域限定操作符 "::"

空间名::要访问的成员;

eg:

int main(void){

//空间里面成员不能直接访问

//cout << num << endl;//error

//通过“::”访问空间里面的成员

cout << ns1::num << endl;//ok

}

2)名字空间指令

using namespace 名字空间名;

在该条指令以后的代码中,指定名字空间中的成员都可见,可以直接访问,省略"空间名::".

常用场景:using namespace std;

以后在使用标准名字空间里面的成员可以省略"std::"

eg:

int main(void){

using namespace ns1;//名字空间指令

cout << num << endl;//ok

}

3)名字空间声明

using 名字空间名::名字空间成员;

将名字空间中特定的一个成员引入当前作用域,在该作用域访问这个成员就如同访问局部的成员一样,可以直接访问,省略“空间名::”。

eg:

int main(void){

using ns1::num;//名字空间声明

cout << num << endl;//ok

}

4 无名名字空间

  不属于任何名字空间的标识符,将被编译器自动的放入无名名字空间中,无名空间里面的成员正常可以直接访问,但是当无名空间的成员和局部的标识符名字一样时,局部优先,这时如果还希望访问无名空间的成员,可以使用作用域限制操作符:"::要访问的成员"。


5 名字空间嵌套//了解

eg:

namespace ns1{

int num = 100;

namespace ns2{

int num = 200;

namespace ns3{

int num = 300;

}

}

}

cout << ns1::num << endl;//100

cout << ns1::ns2::num << endl;//200

cout << ns1::ns2::ns3::num << endl;//300

四 C++的结构体、联合体、枚举

1 C++结构体

1)定义结构体变量可以省略struct关键字

2)在C++结构体中可以直接定义函数,称为成员函数(方法),在成员函数中可以直接访问其它成员.

eg:

struct Student{...};

struct Stduent s;

typedef struct Stduent STU;

STU s2;

-------------------

struct Student{...};

Student s;

2 联合体//了解

1)定义联合体变量可以省略union关键字

2)支持匿名联合

3 枚举

1)定义枚举变量时enum关键字可以省略

2)C++中枚举类型不能当做整型数直接来用

eg:

0 --> RUN

1 --> SLEEP

2 --> STOP

enum STATE{RUN,SLEEP,STOP};

/*enum*/ STATE s;

s = 1;//C:ok  C++:error

s = SLEEP;//C:ok C++:ok

五 字符串

1 回顾C中的字符串

1)双引号常量字符串: "hello"

2)字符指针:char*

3)字符数组:char[]

2 C++中兼容C的字符串的同时,增加了string类型专门表示字符串。

1)定义字符串

  string s;//定义一个空字符串

  string s = "hello";//定义字符串同时初始化


  //下面两种写法和上面写法等价

  string s = string("hello");

  string s("hello");


2)字符串拷贝: =

string s1 = "hello";

string s2 = "jiangguiliang";

s1 = s2;//拷贝

cout << s1 << endl;//"jiangguiliang"

3)字符串连接:+ +=

string s1 = "hello";

string s2 = " world";

string s3 = s1 + s2;

cout << s3 << endl;//hello world

s1 += s2;//s1 = s1 + s2;

cout << s1 << endl;//hello world

4)字符串比较:== != > < >= <=

string s1 = "hello";

if(s1 == "hello"){//1:逻辑真

...

}

if(s1 > "Jiangguiliang"){//1:逻辑真

...

}

5)获取字符串中某个字符: []

string s1 = "hello";

cout << s1[0] << endl;//'h'

s1[0] = 'H';

cout << s1 << endl;//Hello

6)string类型中常用的成员函数

size()/length() :获取字符串的长度

c_str() :将string转换为C中const char*字符串

string s = "hello";

s.size();//5

s.length();//5

const char* p = s.c_str();

推荐书籍:

《C++程序设计原理与实践》

 《C++ Primer》

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

推荐阅读更多精彩内容