一、c++与c的区别

1.c++项目创建

添加的源文件是.cpp文件

2.头文件包含

  1. c++兼容c语言头文件

  2. c++自己写的头文件依旧按c语言头文件方式包含#include“xxx.h”

  3. c++可以去掉.h方式包含c语言的标准库头文件,需要在前面加上c

    #include<stdio.h -> #include<cstdio>

  4. c++标准头文件#include<iostream>

3.c++命令空间

1.创建语法

namespace 空间名
{}
  1. 空间名随便起
  2. 存放代码的空间

2.命名空间的作用

  1. 提高标识符使用率
  2. 避免命名污染 -> 不同模块名字冲突

3.如何访问

//1.直接访问
空间名::变量名;
//2.省略前置访问
using namespace 空间名;
注意:
1. 这个语法语句有一定的作用域
2. 使用这个语法时候一定要自己避免二义性问题
  • ::叫做作用分辨符:可以用来区分全局变量

    int gent;//全局变量
    cout>>::gent;
    //不做区分会采用就近原则
    

4.命名空间嵌套

剥洋葱

namespace A
{int a=1;namespace B{int b=12;namespace C{int c=123;}}
}
A::B::C:c//剥洋葱即可
也可以using namespace A::B::C
这样可以直接用c进行访问

5.标准命名std

c++使用的东西都是在std这个命名空间中,如果写c++程序,大家没加using namespace std;所有的东西都要加std::前置

#include<iostream>
using namespace std;    //标准命名空间
int main()
{return 0;
}

6.先声明后实现

#include<iostream>
using namespace std;
//先声明
namespace mm
{void print();struct Girl;
}
//外面使用需要空间名做限定
void mm::print()
{cout<<"zhangkai"<<endl;
}
struct mm::Girl
{char name[20];int age;
}
int main()
{struct mm::Girl girl={"zhangsan",19};mm::print();//声明需要空间名限定,使用变量成员不需要cout<<girl.name<<"\t"<<girl.age<<endl;return 0;
}

4.c++输入输出

1.c++输出

  1. c++输出由cout加上<<完成
  2. c++依旧支持c语言的转义字符
  3. c++换行可以用endl
//精度暂时不用管,流操作符会讲 IO流中会讲
cout <<"fdsf"<<1<<1.33<<endl;  //打印常量
int a=1;
char b='s';
char str[]="safgsdg";
cout<<a<<b<<str<<endl;   //打印变量

2.c++输入

  1. c++输入由cin加上>>完成

  2. c++输入的过程不需要任何其他东西,默认用空格充当数据间隔

    int a;
    char b;
    char str[10]=" ";
    cin>>a>>b>>str;
    

5.c++函数思想

1.内联函数

1.概念

内联函数就是编译完成函数的存储形式是二进制形式,是一种牺牲空间的方式提升运行效率

2.内联函数的特点
  • 短小精悍

  • 重复使用

  • 在结构体中或者类中实现的函数默认为内联函数

3.声明内联函数
inline int Max(int a,int b)
{return a>b?a:b;
}

2.函数重载

1.概念

c++允许存在相同函数名不同参数的函数存在(和参数返回值一点关系都没有)

2.不同参的三个体现
  • 参数的数目不同
  • 参数的类型不同
  • 参数的顺序不同(建立在类型不同的基础上)
3.综合代码
void print(int a,int b)
{cout<<a+b<<endl;
}
void print(char a,char b)
{cout<<a+b<<endl;
}
void print(int a,int b,int c)
{cout<<a+b+c<<endl;
}
//顺序不同
void print(double a,int b)
{cout<<"顺序不同"<<endl;
}

3.函数缺省

1.概念

函数缺省就是给函数形参默认初始化,就是给形参赋初始值。如果不传参,使用默认参数

2.函数缺省原则
  • 只能从右往左缺省,之间不能存在空的
  • 传参的时候从左往右赋值,没有的使用默认参数
  • 多文件中,.h声明函数缺省即可,实现文件不需要缺省,否者视为重定义
3.综合代码
int sum(int a=0.int b=0,int c=0,int d=0)
{return a+b+c+d;
}
int main()
{cout<<sum()<<endl;//a=0,b=0,c=0,d=0;cout<<sum(1,2)<<endl;//a=1,b=2,c=0,d=0;
}

6.c++起别名与类型转换

1.c++起别名

int Max(int a,int b)
{return a>b?a:b;
}
using 整数=int;
整数 b=12;
using Func=int(*)(int,int);
Func func=Max;
cout<<func(1,5)<<endl;

2.类型转换

//默认转换依旧不变,支持
int a=1.33;
int b='a';
//强制转换
int result=1/double(2);//c++写法
//专业更为安全的转换
//sratic_cast<要转换的类型>(要转换的表达式)---->等效强制转换
int data=static_cast<int>(1.33);
data=int("zhangkai");//老写法不会报错,static_cast会报错

3.c++const

char* str="zhangkai";错误,c++要求更加严格
应该加上const,const char* str="zhangkai";
void print(char* str)
{cout<<str<<endl;
}
//print("hkdsfjf");函数参数不能传入常量
将 char* str改为 const char* str
//不能用 static_cast去掉const属性
//const_cast专门用来操作const属性printf(const_cast<char*>("fadsgsf"));
//dynamic_cast 多态中的转换

7.c++新数据类型

1.c++bool类型

//不用包含头文件
//基本用法
bool num=false;
num=true;
cout<<num<<endl;//计算机非零值表成立
num=123;
cout<<num<<endl;//占用内存,1字节
cout<<sizeof(num)<<endl<<sizeof(bool)<<endl;//结合流控制字符可以打印false和true
cout<<boolalpha<<num<<endl;

2.c++指针

空指针的写法,c++新标准引入新的关键字描述:nullptr

int* p=nullptr;
void* p2=nullptr;

3.c++引用类型

1.基本用法
//基本用法---->理解为别名
int 女朋友=111;
int& 小可爱=女朋友;
小可爱=888;
cout<<女朋友<<endl;//此时女朋友的值为888
2.左值使用
//充当函数返回值,增加左值使用
//注意:不能局部变量的引用
int g_num=12;
//返回引用类型等效返回变量本身
int& returnValue()
{return g_num;
}
returnValue()=1234;
//returnValue()与g_num是一个东西
cout<<g_num<<endl;
3.函数参数使用
//充当函数参数,防止拷贝本产生
void modify2(int& a)  //int& a=实参
{a=1001;
}
int num=100;
modify2(100);//c++引用不是指针,传参传变量即可
cout<<endl<<num<<endl;
4.常用引用
const int num=11;
//int& c=num; //错误
const int& c=num;
5.右值引用
int&& girl=11;//右值引用-->新语法--->规则
//专为常量起别名
void print(const int& a)
{a=1111;//错误,无法修改
}
void print1(int&& a)
{a=1111;
}

关于右值引用,c++提供了可以把左值变成右值得函数

int data=1234;
int&& data2=move(data);//转交所有权限
data2=234;
cout<<data<<endl;
6.指针引用
int number=123;
int* p=&number;   //指针类型:去掉变量名
int* &pp=p;
int number2=11111;
pp=&number2;
cout<<*p<<endl;

4.c++auto类型

auto叫做自动推断类型,一定要有数据作为赋值去推断,才可以使用auto

//auto data;错误,没有推断依据
int num=1;
auto data=num;//自动data为int类型int Max(int a,int b)
{return a>b?a:b;
}
auto Func=Max;  //自动int(*)(int,int)
cout<<Func(4,5)<<endl;struct MM
{int age;
};
struct MM mm={133};
auto PMM=&mm;
cout<<PMM->age<<endl;
auto& Pnum=num;
Pnum=123;
cout<<num<<endl;

5.c++结构体

1.基础
  1. c++类能有的东西c++结构体都可以(构造函数、析构函数、继承)
  2. 注意:c++结构体一旦写了构造函数,必须要按照类的方式去使用,在没有写构造函数之前和c语言的结构体一样的用法
2.预备
#include<iostream>
using namespace std;
struct MM
{int age;int num;//成员函数void print(){cout<<age<<"\t"<<num<<endl;}void setData(int Age,int Num){age=Age;num=Num;}int& getAge(){return age;}int& getNum(){return num;}void printData();
};
void MM::printData()
{cout<<"zhangkai"<<endl;
}
3.类型不需要struct
//类型上得改变,类型不需要struct,结构体名即可
MM mm={100,1001};
cout<<mm.age<<"\t"<<mm.num<<endl;
auto p=&mm;
cout<<p->age<<"\t"<<p->num<<endl;
4.c++结构体允许存在函数
mm.print();   //mm.age mm.num
p->print();
MM girl={200,200};
girl.print(); //girl.age girl.num
5.修改数据
//1.直接访问
mm.age=111;
mm.num=1234;
mm.print();
//2.提供成员访问
mm.setData(888,999);
mm.print();
//3.返回引用方式--->c++叫做提供访问接口
mm.getAge()=66;
mm.getNum()=99;
//每一步打印封装成行为
mm.print();

6.c++动态内存申请

  1. c语言内存分为四区,c++分为五区,c语言动态内存申请是堆区,c++里面是自由存储区
  2. c语言是由:malloc,calloc,realloc,free负责内存申请和释放;c++中是由new和delete做内存申请和释放
  3. 需要包含头文件#include<new>
1.申请单个内存
void testNewOne()
{//先在自由存储区创建一个变量,把变量地址返回给pint* p=new int;*p=1234;cout<<*p<<endl;//申请内存并做初始化int* pp=new int(1234);cout<<*pp<<endl;delete p;delete pp;
}
2.申请一段内存
void testTwo()
{//申请一段内存,等效int p[4]int* p=new int[4];//申请并初始化int* pp=new int[4]{1,2,3,4};//{data}叫做数据列表for(int i=0;i<4;i++){cout<<pp[i]<<"\t";}cout<<endl;delete[] p;delete[] pp;//代表释放一段内存
}
3.二维数组
int** parry=new int*[3];
for(int i=0;i<3;i++)
{parry[i]=new int[5];
}
//释放
for(int i=0;i<3;i++)
{delete[] parry[i];
}
delete[] parry;int (*pArry)[4]=new int[3][4];
auto P2=new int[3][4];
delete[] pArry;
delete[] p2;
4.结构体
struct MM
{int age;int num;
};
void testStruct()
{MM* p=new MM;p->age=123;p->num=1234;
}

7.c++string

c语言的是char*,包含头文件#include<cstring>或者#include<string.h>,c++的string包含方式是#include<string>

#include<iostream>
#include<string>
#include<cstdio>
using namespace std;
1.基本(创建)
void testcreateString()
{string str;str='A';//string str='A';  //不可以string str1="asfasf";cout<<str1<<"\t"<<str<<endl;//输入string str2;cin>>str2;cout<<str2<<endl;//1.赋值,把str2的值赋给str3string str3(str2);cout<<str3<<endl;//2.赋值str3="dfsaf";str3=str1;cout<<str3<<endl;
}
2.基本使用
void userString()
{//比较,直接用运算符比较即可string a="1234";string b="123";cout<<(a<b)<<endl;cout<<(a>=b)<<endl;//使用函数a.compare(b);//字符串连接string result=a+b;//调用函数连接a.append(b);cout<<result<<endl;
}
3.string中函数使用
void testStringFunc()
{//支持下标访问string str="zhangkai";for(int i=0;i<str.size();i++){//cout<<str[i];//等效上面的str[i]cout<<str.at(i);}cout<<endl;cout<<str.front()<<"第一个\t"<<str.back()<<"最后一个"<<endl;//别致的访问方式cout<<*str.begin()<<"str.begin()代表开始的位置"<<endl;cout<<*(str.begin()+1)<<"第二个元素"<<endl;//cout<<str.end()<<endl;//结尾是最后一个元素的后面,不能做*运算//旧版for循环,迭代器for(auto m=str.begin();m!=str.end();m++){cout<<*m;}cout<<endl;//c++区间遍历,新版for循环for(auto v:str)//从str的开始遍历到结尾{cout<<v;}cout<<endl;//c++string和c语言的char*有区别,把c++string转换为c语言的char*,eaxyz要求的是char*string first="sfsdagf";printf("%s",first.data());puts(first.c_str());//c++把数字转换为相应的字符串string test=to_string(12345);cout<<test<<endl;//截断first="zhangkai";first.substr(3);cout<<first<<endl;//不会改变原来的字符串cout<<first.substr(3)<<endl;//截取后的结果当做函数的返回值,ngkai}

c++与c语言的区别相关推荐

  1. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  2. r语言和python-Python和R语言的区别_Python与R的区别和联系

    Python和R语言的区别_Python与R的区别和联系 可能问这个问题会很无脑,但是我还没有深入接触过Python,只是用过R语言.谁能帮我解答一下,这两者的主要区别呢?是否存在代替关系呢? 精彩解 ...

  3. 【Python面试】谈谈对 Python 和其他语言的区别?​

    最近公众号新增加了一个栏目,就是每天给大家解答一道Python常见的面试题,反正每天不贪多,一天一题,正好合适,只希望这个面试栏目,给那些正在准备面试的同学,提供一点点帮助! 小猿会从最基础的面试题开 ...

  4. python和c语言的区别-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  5. python和c语言的区别-c语言和python的区别是什么

    python和C语言的区别如下: 1.C语言是编译语言,Python是脚本语言.说是C语言会比Python快 (看了看学校oj最简单的A+B问题,C语言的运行事件大致在0ms,而Python是6.7. ...

  6. python和c 的区别-Python与C语言的区别

    作为目前最火爆的语言之一,人工智能的兴起让Python一夜之间家喻户晓,几乎所有人对于Python的理解都是"简单""易学",甚至不少中小学也开始计划将Pyth ...

  7. JAVA与C语言的区别之我见

    JAVA与C语言的区别之我见 1.     语言背景: C语言是在单机时代应用非常广泛, c语言是基于汇编语言和高级语言间的一种中级语言,它融合了高级语言的简单易用和汇编语言的执行效率.而Java是在 ...

  8. r与python的区别和联系-Python和R语言的区别?

    Python和R语言的区别 Python和R语言的 数据挖掘技术日趋成熟和,随着互联网以及大批海量数据来,之前传统的依靠spss.SAS等可视化工具实现数据挖掘建模已经越来越不能满足日常需求,依据美国 ...

  9. java语言和C语言的区别

    java语言和C语言的区别 简单的说就是两种不同的语言. 区别如下: 1在运行方式上: C:原始的C是面向过程的.就是按行执行. JAVA:绝对的面向对象.就像按模块执行. (补充:当然,在C++,及 ...

  10. C++和C语言的区别(六)——命名空间

    命名空间用关键字namespace 来定义.命名空间是C++的一种机制,用来把单个标识符下的大量有逻辑联系的程序实体组合到一起. C++标准程序库中的所有标识符都被定义于一个名为std的namespa ...

最新文章

  1. 参加完Python培训可以做什么
  2. 北大数学天才许晨阳,回国效力6年后,为什么又去了美国任教?
  3. Python之常用的高阶函数——abs、map、reduce、filter、sorted
  4. 【2.CentOS6.8安装JDK】
  5. 《假如编程是魔法之零基础看得懂的Python入门教程 》——(二)魔法实习生第一步了解魔杖的使用
  6. apache karaf_Apache Karaf遇到Apache HBase
  7. 作者:窦志成,男,中国人民大学信息学院研究员、硕士生导师。
  8. 杨辉三角形(C语言)(使用一维数组的版本)
  9. 让华泰浮盈10亿美金的AssetMark-统包资产管理平台价值几何?
  10. 百元百鸡 //构造结构体变量
  11. 从0到1——CTFer成长之路(一)
  12. c++ primer plus编程练习题参考第六章
  13. WebAPIs-第01天笔记
  14. Mesos 1.1.1 发布说明
  15. 大学计算机实验教程实验6,《大学计算机基础实验教程》参考答案.(6页)-原创力文档...
  16. 【论文简述及翻译】Learning for Disparity Estimation through Feature Constancy(CVPR 2018)
  17. 操作系统常见面试题整理
  18. fluent python 2nd edition_fluent python读书笔记2.2节
  19. 第一次私服游戏搭建总结
  20. edb mysql_通过MTK迁移Mysql到EDB实战指南

热门文章

  1. 随机采样和随机模拟:吉布斯采样Gibbs Sampling
  2. 深入解析:Android热修复技术选择和原理
  3. 【Linux】defunct 僵尸进程排查
  4. java退出程序的各种方式
  5. Galera集群部署
  6. 创新创业基础-创践课程答案(2023)
  7. js中promise原理及手动基本实现_V4
  8. EXCEL中多个同时设置工作表的顶端标题
  9. GitKraken 小章鱼使用教程
  10. 怎样锁定计算机的技巧,电脑界面图标锁定的方法是怎样的