namespace、struct、enum、union、string(day01)
一 C++概述
C++历史背景
)C++的江湖地位
jave C C++ C# python )C++之父:Bjarne Stroustrup(--)
,Cpre,为C语言增加类的机制
,Bjarne发布了全新的编程语言C with Class
,CFront1.《The C++ programming Language》 )C++发展过程
,GNU C++
,Borland C++(BC编译器)
,Microsoft C++(VC)
,ISO C++
,对C++98进行修订,C++
,ISO C++/C++0x
, ISO对C++标准做了部分扩展,C++
*,C++(未知) 应用领域
)游戏
)科学计算
)网络通信(ACE)
)操作系统和设备驱动
)其它... C和C++
)都是编译型语言
)都是强类型语言,但是C++更强
)C++兼容C语言,但是去除了C中不好的特性
)C++增加了很多了好的特性,比C语言更适合大型软件的开发 二 第一个C++程序
编译方式
)gcc xx.cpp -lstdc++
)g++ xx.cpp //good 文件扩展名
)xx.cpp//good
)xx.cc
)xx.cxx
)xx.C 头文件
//包含标准C++中所有和I/O有关的类型、对象、函数
#include <iostream> //在C++中依然可以使用C库的函数,但需要写上对应的有文件,C++中提供了一套和C库对应的头文件
#include <stdio.h> ==> #include <cstdio>
#include <stdlib.h> ==> #include <cstdlib>
#include <string.h> ==> #include <cstring>
... 标准输入和输出
)用cin对象表示标准输入//类似scanf
eg:
//从标准输入设备获取一个整形数放到变量a中
int a;
scanf("%d",&a);
cin >> a;
">>" 称为提取运算符
eg:
int a;
double d;
scanf("%d%lf",&a,&d);
cin >> a >> d; )用cout对象表示标准输出//类似printf
eg:
int a = ;
printf("%d\n",a);
cout << a << endl;
"<<":称为插入运算符
注:endl表示换行,和“\n”等价
eg:
int a = ;
double d = 3.14;
printf("%d,%lf\n",a,d);
cout << a << ',' << d << endl; "std::"表示标准名字空间 三 名字空间(namespace)
名字空间的作用
)避免名字冲突
)划分逻辑单元 定义名字空间
namespace 名字空间名{
名字空间成员1;
名字空间成员2;
...
}
名字空间成员可以是全局变量、全局函数、类型、名字空间。
eg:
namespace ns{
int i;//全局变量
void func(void){...}//全局函数
struct Stduent{...};//结构体类型
namespace ns2{...}
} 名字空间成员使用
)通过作用域限定运算符“::”
名字空间名::要访问的成员;
eg:
namespace ns{
int i;//全局变量
}
int main(void){
i=;//error,名字空间里面成员不能直接访问
ns::i=;//ok,通过作用域限定符可以访问
}
)名字空间指令
using namespace 名字空间名;
在该条指令以后的代码,指定名字空间中的成员都可见,访问其中的成员可以省略作用域限定。 )名字空间声明
using 名字空间名::名字空间成员;
将名字空间中的某个成员引入当前作用域,在该作用域访问这个成员如果访问局部变量一样,可以省略作用域限定.
eg:
namespace ns{
int i1=;
int i2=;
}
int main(void){
using namespace ns;//名字空间指令
cout << i1 << endl;//ok
cout << i2 << endl;//ok
---------------------------
using ns::i1;//名字空间声明
cout << i1 << endl;//ok
cout << i2 << endl;//error
}
无名名字空间
不属于任何名字空间的标识符,将被编译器划分到无名名字空间中,显式访问里面的成员:"::成员"。 嵌套名字空间//了解
eg:
namespace china{
namespace beijing{
namespace chaoyang{
char* name;
}
}
}
china::beijing::chaoyang::name = "老王"; 四 C++结构体、联合体和枚举
C++结构体
)定义结构体类型变量时可以省略“struct”关键字
eg:
struct A{...};//声明
A a;//定义结构体类型的变量a
)在C++结构体里面可以直接定义函数,称为成员函数,而且在成员函数中可以直接访问成员变量;
eg:
struct A{
int a;//成员变量
void foo(void){...}//成员函数
}; 联合体 //了解
)定义联合体类型变量时可以省略“union”关键字
)支持匿名联合 枚举
)定义枚举类型变量时可以省略“enum”关键字
)C++枚举是一种独立的数据类型,而C中枚举本质就是整型数。
eg:
enum COLOR{RED,GREEN,BLUE};
/*enum*/COLOR c;
c = ;//C:ok C++:error 五 C++的字符串
C++兼容C中字符串表示方式
)字面值常量字符串 "hello"
)字符指针 char*
)字符数组 char[]
eg:
const char* p = "hello";
//strcpy(p,"world");//段错误
p = "world";//ok char arr[]={};
strcpy(arr,"jiangguliang");//越界使用内存危险
cout << arr << endl; //arr-->char* const arr
//arr = "hello";//error
C++中增加string类型,专门表示字符串
)定义字符串
string s;//定义空字符串
string s1 = "hello";//定义同时初始化
string s2("hello");
string s3 = string("hello");
注:s1 s2 s3三种写法完全等价
)字符串的基本操作
--》字符串拷贝"="
--》字符串的连接"+" "+="
--》字符串比较: > < == !=
--》获取字符串中某个字符:[]
--》获取字符串的长度:size()/length()
--》将string转换成char*: c_str()
eg:
string s1 = "hello";
s1 = "abcdefg";//拷贝字符串
cout << s1 << endl;//abcdefg
------------------------------
string s1 = "hello";
s1 += " world";//把world连接到s1后面
cout << s1 << endl;//"hello world"
------------------------------
string s1 = "hello";
string s2 = s1 + " world";
cout << s2 << endl;//"hello world"
------------------------------
string s1 = "hello";
string s2 = "world";
if(s1 > s2){//字符串比较
cout << "s1>s2" << endl;
}
else{
cout << "s1<s2" << endl;
}
------------------------------
string s1 = "hello";
//获取字符串中某个字符
cout << s1[] << endl;//h
s1[] = 'H';
cout << s1 << endl;//Hello
------------------------------
string s1 = "hello world!";
cout << s1.size() << endl;//
cout << s1.length() << end;//
-----------------------------
string s1 = "hello";
char* s2 = s1;//error
char* s2 = s1.c_str();//ok =====================
练习:使用string表示字符串,从键盘读取一个字符串,统计里面包含字母A/a的个数.
string s;
cin >> s;//注:会被空白字符截断
getline(cin,s);//它可以读走空格
namespace、struct、enum、union、string(day01)的更多相关文章
- 执行对象Statement、PreparedStatement和CallableStatement详解 JDBC简介(五)
执行对象是SQL的执行者,SQL是“安排好的任务”,执行对象就是“实际工作的人”. 执行对象有三种: Statement.PreparedStatement和CallableStatement,他们都 ...
- 添加EF上下文对象,添加接口、实现类以及无处不在的依赖注入(DI)
添加EF上下文对象,添加接口.实现类以及无处不在的依赖注入(DI) 目录索引 [无私分享:ASP.NET CORE 项目实战]目录索引 简介 上一章,我们介绍了安装和新建控制器.视图,这一章我们来创建 ...
- 探究 C# 中的 char 、 string(一)
目录 探究 C# 中的 char . string(一) 1. System.Char 字符 2. 字符处理 3. 全球化 4. System.String 字符串 4.1 字符串搜索 4.2 字符串 ...
- [转]SRTM、ASTER GDEM等全球数字高程数据(DEM)下载方式简介
之前写过一篇短文对比过几种数字高程数据的区别:5种全球高程数据对比,这篇文章简要介绍下如何下载这些数据. 1.DLR的数字高程数据.该数据也是SRTM(shuttle radar topo ...
- [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)
[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...
- C# ZXing.Net生成二维码、识别二维码、生成带Logo的二维码(二)
1.使用ZXint.Net生成带logo的二维码 /// <summary> /// 生成带Logo的二维码 /// </summary> /// <param name ...
- 前端总结·基础篇·JS(二)数组深拷贝、去重以及字符串反序和数组(Array)
目录 这是<前端总结·基础篇·JS>系列的第二篇,主要总结一下JS数组的使用.技巧以及常用方法. 一.数组使用 1.1 定义数组 1.2 使用数组 1.3 类型检测 二.常用技巧 2.1 ...
- php一些单选、复选框的默认选择方法(示例)
转载 http://www.php.cn/php-weizijiaocheng-360029.html 一. radio和checkbox及php select默认选择的实现代码 1.radio单选框 ...
- SQL Server ->> 高可用与灾难恢复(HADR)技术 -- AlwaysOn(实战篇)之建立活动目录域、DNS服务器和Windows故障转移群集(准备工作)
因为篇幅原因,AlwaysOn可用性组被拆成了两部分:理论部分和实战部分.而实战部分又被拆成了准备工作和AlwaysOn可用性组搭建. 三篇文章各自的链接: SQL Server ->> ...
随机推荐
- hiho challenge 15 C题
DP题.状态很容易设,dp[u][0]表示u点子树解决,dp[u][1]表示剩一条链,dp[u][2]表示邻边全炸. 转移有点难,看代码解释: #include <iostream> #i ...
- Spark Streaming接收Kafka数据存储到Hbase
Spark Streaming接收Kafka数据存储到Hbase fly spark hbase kafka 主要参考了这篇文章https://yq.aliyun.com/articles/60712 ...
- 从Eclipse到Android Studio:Android项目怎样进行迁移
一開始我们学习Android开发.基本上都是从Eclipse上開始的,随着Google推出Android Studio,这一情况慢慢有了改变.未来非常长一段时间将会呈现Eclipse和AS相互存在的情 ...
- JMS解决系统间通信问题
近期在给公司项目做二次重构,将原来庞大的系统拆分成几个小系统.系统与系统之间通过接口调用,系统间通信有非常多方式,如系统间通信接口做成请求controller,只是这样不方便也不安全,经常使用的方式是 ...
- ajax——dom基础
javascript中dom实现能够使我们在ajax中通过javascript代码对html和xml数据进行dom方式操作,从而做到页面的动态改动更新和数据的提取处理. dom概念 dom文档对象模型 ...
- FreeRTOS系列第20篇---FreeRTOS信号量API函数
FreeRTOS的信号量包括二进制信号量.计数信号量.相互排斥信号量(以后简称相互排斥量)和递归相互排斥信号量(以后简称递归相互排斥量).我们能够把相互排斥量和递归相互排斥量看成特殊的信号量. 信号量 ...
- web.xml整理
web.xml,部署描写叙述符文件(专业术语).是在Servlet规范中定义的.是web应用的配置文件(Servlet 3.0已開始放弃使用web.xml,转而使用annotation注解来配置项目) ...
- hdu1325 Is It A Tree?(二叉树的推断)
Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) To ...
- Java 最基础的三种排序排序
主要讲五个排序,冒泡排序.选择排序.插入排序 1)冒泡排序 /** * 冒泡排序 (默认升序排) * 相邻两个相比较,较大的向后放,从数组或者集合中的第一个与第二个比较到倒数第二个与最后一个比较为一轮 ...
- BZOJ 3727 DP?推式子..
思路: 设$sum[i]表示i的子树中a[i]的和$ $b[1]=\Sigma a[i]*dis[i] = \Sigma _{i=2} ^n sum[i]$ $b[x]-b[fa[x]]=sum[1] ...