huangfu Blog
Love Leanote!
Toggle navigation
huangfu Blog
主页
About Me
归档
标签
01名字空间\结构\联合\枚举\布尔
2017-02-06 19:59:47
80
0
0
tarena
# 一. C++的发展历史 83年 本贾尼 正式命名成c++ 87年 GNU 制定了C++标准 92年 微软\IBM 支持 98年 ansi/ISO 制定了C++标准 C++98 03年 ISO 制定了C++03 11年 ISO 制定了C++11(C++0x) g++ ***.cpp -std=c++0x # 二. C++和C语言的关系 C++是在C语言基础上发展来的,C++兼容C C++的类型检查更加严格 C++扩展了C * 面向对象编程(以类的方式组织代码) * 运算符重载(一种函数的特殊表现形式) * 异常处理(一种新的错误表现和处理形式) * 泛型编程(通用类型和算法编程,标准模板库) # 三.第一个C++程序 #include <iostream> using namespace std; int main() { cout << "hello C++!" << endl; int age = 0; cout << "请输入你的年龄:" << endl; cin >> age; cout << "你的年龄是:" << age << "岁" << endl; } 编译链接 > gcc 01first.cpp -lstdc++ 或 > g++ 01first.cpp 总结: 1.源文件 * c++程序以.cpp结尾 可以是.c .C .cc .c++ 2.头文件 * 标准的c++头文件没有.h 位置/usr/include/c++/5.* \#include `<iostream>` \#include `<string>` \#include `<list>` * 标准的c语言头文件 去尾加头 \#include `<stdio.h>` ----> #include `<cstdio>` \#include `<time.h>` ----> #include `<ctime>` \#include `<string.h>` ----> #include `<cstring>` * 系统C的头文件 和C语言使用方式一样(原样使用) \#include `<unistd.h>` \#include `<pthread.h>` * 用户自定义头文件 写的时候带.h 导入正常导入 \#include `"data.h"` 3.库文件 * 都和C语言中使用完全一样 C++中的输入输出 会自动识别格式 4.编译器 * 可以使用gcc 但需要加一个链接库 `gcc ***.cpp -lstdc++` * 推荐使用g++ g++编译选项的作用和gcc几乎是相同的 -o -c -g -S -I -l -L等 `g++ ***.cpp` 5.使用命名空间std (using namespace std;) #命名空间 1.概念 `把一组逻辑相关的变量 函数 类型 等组织到一起的一个逻辑结构` 2.作用 `便于分工 和 划分模块 避免命名冲突` 3.语法 namespace 空间名 { /* 定义 声明 变量 和 函数 定义类型*/ } 4.举例 #include <iostream> using namespace std; namespace IBM { int age = 30; double avgsal; void show(); } /* 命名空间 可以分开 多个同名命名空间 逻辑上是一个*/ namespace IBM { void show() { cout << this is IBM age is << age << endl; } } namespace tarena { int age; void show() { cout << this is tarena age is << age << endl; } } int main() { } 5.如何使用命名空间 * 在数据前加 命名空间名:: `IBM::show(); tarena::age=13; tarena::show();` * 使用using声明 using 空间名::数据名; `using IBM::show; using IBM::age; 注意:using指令可以放到全局区 也可以放到函数内部 局部优先级大于全局 但是没有先来后到之说 并相互冲突编译错误` * using namespace 空间名; `using namespace std; using namespace IBM; using namespace tarena; 注意:using namespace 声明可以多次使用, 这么做难免导致重复声明,编译器不会报错误,但是当调用不同命名空间下的同名变量或函数就会报错` 6.命名空间嵌套 namespace ns1 { namespace ns2 { namespace ns3 { } } } /*`调用*/ ns1::ns2::ns3 ... /* 命名空间重命名*/ namespace ns4=ns1::ns2::ns3; 7.无名命名空间 #include <iostream> using namespace std; int g_x = 1; /* 显示无名命名空间 相当于加了static的效果*/ namespace { int g_y = 2; } int main() { cout << g_x << endl; cout << ::g_x << endl; cout << g_y << endl; cout << ::g_y << endl; } * 概念 ` 如果一个数据 没有定义在任何命名空间中 则这个数据属于无名命名` ` 还有一种叫显示的无名命名空间 显示无名命名空间相当于加了static的效果 namespace { }` #结构体 **1.和C的相同点** * 语法上和C没有什么区别 **2.和C的不同点** * 表达*类型*的时候可以省略struct关键字 * 结构体中可以定义函数(成员函数) * 没有任何成员变量的结构体大小是1 C语言中是0 **3.例子代码** #include <iostream> using namespace std; void show() { cout << "这是全局函数show" << endl; } struct Date { int year; int mon; int day; void show() { /* 这里一定要加双冒号*/ ::show(); cout << year << '-' << mon << '-' << day << endl; } } int main() { Date date = {2017,1,30}; date.show(); } #联合体 **1.和C的相同点** * 语法上和C没有区别 **2.和C的不同点** * 表达类型时可以省略关键字union * C++支持匿名联合 **3.举例** #include <iostream> using namespace std; /* 有名联合*/ union Data { int x; char y[4]; }; int mian() { Data d; /* 无名联合*/ union { int x; char y[4]; }; x = 0x31323334; /* c++可以这么写*/ for(int i = 0; i < 4; i++) cout << y[i] << ' '; cout << endl; /* 最后输出4 3 2 1*/ } #枚举 **1.和C的相同点** * 语法上和C没有区别 **2.和C的不同点** * 表达类型时可以省略关键字enum * 一个枚举变量可以赋给一个整数变量,但是一个整数或整数变量不能赋值给枚举变量 (C++中的类型检查比C严格) **3.举例** #include <iostream> using namespace std; /* 枚举默认从0开始*/ enum Direction {UP = 1, DOWN, LEFT, RIGHT}; int main() { Direction dir = DOWN; int x = dir; cout << x << endl; x = 91; /* C++不允许整数或整数变量赋值给枚举变量*/ //dir = x; } #布尔类型 C++中天生就支持bool类型, C语言中需要导入 #include `<stdbool.h>` 举例 #include <stdio.h> using namespace std; int main() { bool f; f = "abc"; cout << f << endl; // 输出1 cout << boolalpha << f << endl; // 输出true } #C++中的函数 **1. 和C的不同点** * C++中一个函数如果没有参数,在调用时严格匹配参数列表 ` void foo(); 相当于C语言中 void foo(void);` * 不在支持C语言中的隐式声明,函数调用之前必须进行声明或定义 * 不在像C函数默认返回int类型,函数必须指定返回值类型,main函数除外 * C++函数可以不返回值,也就是不return **2. 例子代码** #include <iostream> using namespace std; void foo() { cout << "foo()" << endl; } int getmax (int x, int y) { } int main() { foo(); /* 编译报错*/ //foo(1); /* 返回垃圾值*/ cout << getmax(1,112) << endl; /* 注意C++中的函数条用必须要声明,不支持隐式声明*/ }
上一篇:
05this指针/const对象和const函数/析构函数
下一篇:
02函数重载/哑元/参数默认值/内联/动态分配内存/引用
0
赞
80 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
立即登录
, 发表评论.
没有帐号?
立即注册
0
条评论
More...
文档导航
没有帐号? 立即注册