目录
一、c++概述
二、初识c++
1、第一个c++程序
2、c++面向对象的三大特性(重要)
三、作用域运算符::
1、使用关键字namespace创建一个命名空间
2、命名空间只能定义在全局
3、 命名空间嵌套
4、随时将新的成员加入命名空间
5、命名空间中 函数的声明和实现分开
6、无名命名空间
7、命名空间取别名
8、使用using申明命名空间中的某几个成员可用
出现的问题1: 重复定义
遇到函数重载(函数名相同,形参不同):
9、using声明整个命名空间
五、类型增强
1、全局变量检测增强
2、c++的函数形参必须有类型
3、c++中函数如果没有参数,必须写void
4、更严格的类型转换
5、结构体类型增强(重要)
6、c++新增bool类型
7、 三目运算符增
六、c++中的const
一、c++概述
C++是对C的扩展,任何有效的c程序都是有效的c++程序,c++程序可以使用已有的c程序库。
C++语言在c语言的基础上添加了面向对象编程和泛型编程的支持。c++融合了3种不同的编程方式:c语言代表的过程性语言.c++在c语言基础上添加的类代表的面向对象语言.c++模板支持的泛型编程。我们常常将这两门语言统称为“C/C++”。
c编程思想:面向过程
c++编程思想:面向对象、泛型编程
面向过程(c): 通过分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步 实现,并调用。
面向对象(c++):面向对象编程,简称oop技术。算法与数据结构被看做是一个整体(对象),程序=对象+对象+对象 +对象
c++标准:c++98、c++11
二、初识c++
1、第一个c++程序
#include:预编译指令.引入头文件iostream。 using namespace std:使用标准命名空间,命名空间用关键字namespace来定义。命名空间是.C++的一种机制..用来把单个标识符下的大量有逻辑联系的程序实体组合到一起。此标识符作为此组群的名字。 cout<<"hello world"< endl;和printf 功能一样,输出字符串"hello world“。
扩展:c++头文件没有扩展名。但是有些c语言的头文件被转换为c++的头文件,这些文件被重新命名丢掉了扩展名.h[使之成为c++风格头文件),并在文件名称前面加上前缀c(表明来自c语言)。例如c++版本的math,h.为 cmath。
2、c++面向对象的三大特性(重要)
- 封装:将相同属性的数据和方法封装在一起,加权限区分,用户只能借助公共方法操作私有数据。
- 继承:体现在类和类之间的关系,如果A类继承于B类,那么A类直接拥有B类的数据和方法。
- 多态:一个接口(函数),多种功能。
三、作用域运算符::
::解决局部变量与全局变量的重名问题四、命名空间
创建名字是程序设计过程中一项最基本的活动,当一个项目很大时,它会不可避免地包含大量名称,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。c++允许我们对名字的产生和名字的可见性进行控制。我们之前在学习c语言可以通过static关键字来使得名字只得在本编译单元内可见,在c++中我们将通过一种通过命名空间来控制对名称的作用域。命名空间的本质:对符号常量、变量、函数、结构、枚举、类和对象等等进行封装。
1、使用关键字namespace创建一个命名空间
2、命名空间只能定义在全局
3、 命名空间嵌套
4、随时将新的成员加入命名空间
5、命名空间中 函数的声明和实现分开
6、无名命名空间
无命名空间中的标识符只能在本文件内访问,相当于给这个标识符加上了static。
7、命名空间取别名
8、使用using申明命名空间中的某几个成员可用
出现的问题1: 重复定义
若using A::num放在外部,作为全局变量,就不会重复定义。
遇到函数重载(函数名相同,形参不同):
namespace A {
void fun()
{
cout << "A中fun void" << endl;
}
void fun(int a)
{
cout << "A中fun int" << endl;
}
void fun(int a,int b)
{
cout << "A中fun int int" << endl;
}
}
void test()
{
//函数重载,命名空间中所有同名函数都被声明可用
using A::fun();
fun();
fun(10);
fun(10, 10);
}
9、using声明整个命名空间
加作用域解决冲突:
五、类型增强
1、全局变量检测增强
int a;//没有赋值,当作声明
int a=10;//赋值,当作定义
此代码在c++中编译失败,在c下编译通过。
2、c++的函数形参必须有类型
c语言:允许函数形参无类型(可以传任意参数),c++不允许。
//i没有写类型,可以是任意类型
int fun1(i)
{
printf("%d\n", i);
return 0;
}
//i没有写类型,可以是任意类型
int fun2(i)
{
printf("%s\n", i);
return 0;
}
此代码在c++中编译失败,在c下编译通过。
3、c++中函数如果没有参数,必须写void
在C语言中,int fun()表示返回值为int,接受任意参数的函数,int fun(void)表示返回值为int的无参函数。在C++中..int fun(和 int fun(void)具有相同的意义.都表示返回值为int的无参函数。
/没有写参数,代表可以传任何类型的实参
int fun()
{
printf("fun函数\n");
return 0;
}
int main(int argc, char *argv[])
{
fun(10);
fun(10, 20);
fun("hello");
return 0;
}
此代码在c++中编译失败,在c下编译通过,若加上void,c编译也不通过。故无参数建议写void。
4、更严格的类型转换
c语言中枚举变量(底层是数字)允许赋其他int类型的值,c++不允许
5、结构体类型增强(重要)
6、c++新增bool类型
标准c++的 bool类型有两种内建的常量true(转换为整数1)和 false(转换为整数0)表示状态。这三个名字都是关键字。bool类型只有两个值,true(1 值),false(0值) bool类型占1个字节大小给bool类型赋值时,非0值会自动转换为true(1),0值会自动转换false(0)
7、 三目运算符增
六、c++中的const
1、c++和c中的const都是修饰变量为 只读。
2、c语言 严格遵循 const修饰的是只读变量,但可以通过指针修改其值。
3、c++的const 会对变量 优化,不可以通过指针修改其值。
如果以常量初始化const修饰的变量 编译器会将变量的值 放入符号常量表中,不会立即给变 量开辟空间,只有当对a 取地址时 编译器才会给a开辟空间(只读变量)
通过指针变量p 访问空间内容*p取的是空间的值。通过变量名a 访问的是符号常量表中的值 。
4、如果以变量初始化const修饰的只读变量,没有符号常量表,立即开辟空间,可以通过指针修改其值。
5、如果以const修饰的是自定义类型的变量 也不会有符号常量表,立即开辟空间,可以通过指针修改其值。
6、c++中尽量使用const代替define
//#define A 10
const int A=10;
- const有类型,可进行编译器类型安全检查。#define无类型,不方便进行类型检查
- const有作用域,而#define不重视作用域,宏不能作为命名空间、结构体、类的成员,而const可以