一、C++新特性
1.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)
{
cout<<"hello world"<<endl;
return 0;
}
2.基本概念
面向对象:是一种编程思想,一种软件架构思想
基本原则是程序是由单个能够起到子程序作用的单元或对象组合而成,
以达到软件工程的三个主要目标:重要性、灵活性和扩展性
3.从C到C++
1.更加严格的类型检查
原本在C语言中允许的语法,在C++可能是警告或错误
原本在C语言中的警告,在C++直接就是错误
char *ptr="hello";
printf("%s\n",ptr);
int *ptr=malloc(32);
2.cout与cin
char ch='B';
cin>>ch;
cout<<"ch:"<<ch<<endl;
char *str;
int num;
cin>>ch>>str>>num;
cout<<"ch:"<<ch<<" str:"<<str<<" num:"<<num<<endl;
字符串的定义和输入:
char *str;
cin>>str;
char str[64];
cin>>str;
char *str=new char;
cin>>str;
3.引用
相比C语言的指针更加的安全和效率
引用:即给变量取别名
int i;
int &r=i;
可以用于代替部分指针,提高安全性(不会经常非法访问内存)
C++中传参 : 1.赋值传递 2.传地址 3.传引用
4.内联函数
C++提供一种提高效率的方法,即在编译时将所调用函数的代码直接嵌入到主调函数中
(即适当的用空间换时间)。这种嵌入到主调函数中的函数称为内置函数(inline function),
又称为内嵌函数或内联函数。
它会在调用函数时,将函数在此时展开
语法形式:
inline 储存类型 数据类型 函数名 (参数列表)
注意:内联函数 一般不宜太复杂(如循环或switch),或存在循环,否则会导致程序过大(过度的空间换时间)
g++ xx.cpp -E 查看编译过程
5.函数重载
C++允许用同一个函数名定义多个函数,这些函数的参数个数、参数类型不同、顺序。
这就是函数的重载(function overloarding)。即对一个函数名重新赋予它新的含义,
使一个函数可以多用
int add(int a,int b)
{
return (a+b);
}
double add(double a,double b)
{
return (a+b);
}
6.函数参数默认值
C++允许赋予函数参数默认值,即在调用函数时,可以不写某些参数的值,编译器会自动把默认值传递
给调用语句中。
注:1.默认值只能在声明中设置
2.注意传参规则,实参给形参传参,是从前往后进行
3.给函数参数设置默认值,从后往前进行设置
int tcpservic_init(const char *ip="0.0.0.0",int port=6666);
调用时:tcpservic_init();
tcpservic_init("192.168.6.2",7777);
tcpservic_init("192.168.6.2");
tcpservic_init(7777);
int fun(char *str="hello",int num);
调用时:fun("world",1);
fun("world");
fun(1);
int fun(char *str,int num=6666);
调用时;fun("hello",7777);
fun("hello");
fun(7777);
7.名字空间
全局域
名字空间域:C++在C基础上增加了名字空间域,可以将不同模块的代码设置在不同的名字空间域下
类域
局部域:函数内部
namespace aa;
{
int i=100;
void fun()
{
cout<<"aa function"<<endl;
}
}
void main()
{
aa::fun();
}
------>打印aa funtion
8.new与delete
在C++中用new和delete分别代替,malloc和free
C:
char *ptr=(char*)malloc(128);
free(ptr);
C++:
char *ptr=new char [128];
delete[] ptr;
int *ptr=new int;
delete ptr;