一、C++新特性
1.1 c 与 c++
| C | C++ , 对C的完善与扩充 |
---|
编程模式 | 面向过程 | 支持面向过程、支持面向对象、支持泛型编程 |
头文件 | xxx.h | xxx |
源文件 | xxx.c | xxx.cpp xxx.C xxx.cxx |
编译器 | gcc | g++ |
面向过程编程思路 | 侧重点:过程, 函数+函数+函数 | 侧重点:事务,类的设计, 对象+对象+对象 |
优势 | 简单,灵活,效率,底层开发 | 支持面向对象,支持泛型,代码复用,大规模问题, |
//简单的c程序
#include <stdio.h> //头文件 声明
int main(void) //入口函数
{
printf("c program\n");
return 0;
}
//简单的C++程序
#include <iostream> //头文件
using namespace std;
int main(void) //入口函数
{
//std::cout<<"C++ program\n";
cout<<"hello world"<<endl;
return 0;
}
1.2 基本概念
面向对象: 是一种编程思想,一种软件架构思想
基本原则是程序是由单个能够起到子程序作用的单元或对象组合而成,以达到软件工程的三个主要目标:重用性、灵活性和扩展性。
1.3 从C到C++
1.更加严格的类型检查
//原本在c语言中允许的语法,在C++可能是警告或错误
//原本在c语言中的警告,在C++直接就是错误
char *ptr = "hello";
//char * = const char * //这里不够严谨, C语言允许这种做法
printf("%s\n",ptr);
int *ptr = malloc(32);
//int * = void * //这里不够严谨, C语言允许这种做法
2.cout与cin
char ch='A';
float f = 3.53;
const char *ptr = "hello";
int i = 0x64;
cout<<ch<<endl;
cout<<f<<endl;
cout<<ptr<<endl;
cout<<hex<<i<<endl;
3.引用 //安全,效率
给变量取别名
//示例
int i;
int &r = i; //给变量i设置一个别名r
//可以用于代替部分指针,提高安全
c++中函数传参: 1.赋值传递 2.传地址 3.传引用
4.内联函数
C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中。这种嵌入到主调函数中的函数称为内置函数(inline function),又称内嵌函数或内联函数
//语法形式
inline 存储类型 数据类型 函数名(参数列表)
//注意:内联函数 一般不宜太复杂,或存在循环,否则会导致程序过大 (用空间换时间)
5.函数重载
C++允许用同一函数名定义多个函数,这些函数的参数个数、参数类型不同、顺序。这就是函数的重载(function overloading)。即对一个函数名重新赋予它新的含义,使一个函数名可以多用。
//两个版本的add 调用时通过实参确定 具体版本
int add(int a,int b)
{
return (a+b);
}
double add(double a,double b)
{
return (a+b);
}
6.函数参数默认值
C++允许赋予函数参数默认值,即在调用该函数时,可以不写某些参数的值,编译器会自动把默认值传递给调用语句中。
//默认值只能在声明中设置
//注意传参规则,实参给形参传参,是从前往后进行
//给函数参数设置默认值,从后往前进行设置
int tcpservice_init(const char *ip="0.0.0.0",int port=6666); //给函数参数设置默认值
7.名字空间
全局域
名字空间域:C++在C基础上增加了名字空间域,可以将不同模块的代码设置在不同的名字空间域下
类域
局部域: 函数内部
//基本语法
namesapce aa
{
int i = 100;
void fun(void){
cout<<"aa fun"<<endl;
}
}
8.new与delete
//在C++中 用于代替malloc与free
char *ptr = (char *)malloc(128);
free(ptr);
char *ptr = new char [128] ;
delete [] ptr; //对于数组 释放时使用 delete[]
int *ptr = new int; //int *ptr = (int *)malloc(sizeof(int))
delete ptr;