1.定义变量的位置

在c中,所有的局部变量都必须在函数的开头定义。
而在c+中却不是这样的强求,只要在使用该变量之前定义就可以。

2.c++中的波尔类型(bool)

只有两种情况 就是0和1;掌握bool(波尔)、int(整型)、pointer(指针)、float(实型)这积累数据与0的比较,直接看demo
#include <iostream>
using namespace std;int main()
{bool a = false;int b = 5;float c = 0.01;char *d = NULL;if (a){cout<<"a = 1"<<endl;}else//(!a){cout<<"a = 0"<<endl;}if (b == 0){cout<<"b = 0"<<endl;}else{cout<<"b != 0"<<endl;}if ((c > -0.000001) && (c < 0.000001)){cout<<"c = 0"<<endl;}else if (c < -0.000001){cout<<"c < 0"<<endl;}else{cout<<"c > 0"<<endl;}if (NULL == d){cout<<"d = NULL"<<endl;}else{cout<<"d != NULL"<<endl;}return 0;
}

3.c中的struct结构体与c++中的class类和对象

#include <iostream>using namespace std;struct student{char *name;int age;float score;
};int main()
{struct student stu1;stu1.name = "xiaoming";stu1.age = 19;stu1.score = 59.8;printf("%s %d %6.3f\n", stu1.name, stu1.age, stu1.score);return 0;
}
显然c++的类和对象更方便,功能也更强大。但是要记牢class的用法,和特点

#include <iostream>using namespace std;class student{
public :char name[24];//char *name;int age;float score;void say(){printf("name:%s\nage:%d\nscore:%6.3f\n", name, age, score);//cout<<"name = "<<name<<"\nage = "<<age<<"\nscore = "<<score<<endl;}
};int main()
{class student stu1;strcpy(stu1.name, "xiaoming");stu1.age = 19;stu1.score = 59.8;stu1.say();return 0;
}

4.在堆上申请空间和释放new和delete

在c中是用malloc和free来在堆上申请空间和释放空间。
在c++中也有同样的操作,是用new和delete。切记在申请和释放空间的函数中不要混用,一定要成对出现!例如不能吧new和free用在一起。
new申请空间成功后返回首地址。
语法:指针变量 = new 数据类型;
            指针变量 = new 数据类型[长度]。
例如:

int *p;
p = new int;

或是

char *pstr = new char [50];

delete可以用于释放堆上的空间,语法如下:

delete p;
delete [50] pstr;

5.命名空间

在C++中我们经常会碰到"using namespace"等字符,namespace就是命名空间,而using 属于声明;
命名空间的概念
 C++中采用单一的全局变量的命名空间,如果在一个空间中,两个变量或函数的名字一样,编译的时候就会冲突。命名空间就是为了解决C++中函数变量的命名冲突所采取的一种措施,能够解决多模块协同开发出现变量函数命名的冲突问题。
     在这里面可以把命名空间理解成文件夹,如果你在hel1这个文件夹中编辑两个hello.cpp肯定会出问题,但是如果一个在hel1,一个在hel2这个文件夹中p,这个就不会出现冲突。
 命名空间的必要性: 当程序比较大的时候,需要多人合作,命名空间就非常必要。
命名空间的定义
命名空间用namespace定义,格式如下:
namespace  命名空间名
{
   命名空间生命内容
}
看demo。
#include <iostream>using namespace std;namespace nsa{void print(){cout<<"nsa"<<endl;}
}namespace nsb{void print(){cout<<"nsb"<<endl;}
}int main()
{nsa::print();nsb::print();return 0;
}

其中的::是域操作符。

(1)using 声明

using声明可以出现在全局域和任意命名空间中,也可以出现在局部域中。
    using  namespace_name::name;
    一旦使用using声明,就可以直接引用命名空间中的成员,而不需要再引用该成员的
    命名空间。
    命名空间std,这是最常用的命名空间,而不需要再引用该成员的命名空间。

#include <iostream>using std :: cin;//using声明,表明要引用标准库std中的成员cin;
using std :: string;//using声明,表明要引用标准库std中的成员string;
using std :: endl;int main()
{string temp;cin>>temp;std :: cout<<temp<<endl;return 0;
}

在using 指令中,using后面必须跟关键字namespace,而且最后必须为命名空间名;
using 声明中,关键字后面没有namespace, 后面必须为命名空间的成员名。

(2)using的作用域

#include <iostream>using namespace std;namespace nsa{int a = 5;
}namespace nsb{float a = 5.55;
}int main()
{{using namespace nsa;cout<<"nsa a = "<<a<<endl;//using指令,使用nsa}{using namespace nsb;cout<<"nsb a = "<<a<<endl;//using指令,使用nsb}return 0;
}

6.函数的重载

c++中允许同名函数的存在,但是参数必须不同:可以是参数个数不同,或参数个数相同、但类型不同 -- 这就是函数的重载。

#include <iostream>
using namespace std;int max(int a, int b);
int max(int a, int b, int c);
double max(double a, double b);int main()
{int n;int a = 2;int b = 3;int c = 5;double z;double x = 55.5;double y = 66.6;n = max(a, b);cout<<"a = "<<a<<" b = "<<b<<" max = "<<n<<endl;z = max(x, y);cout<<"x = "<<x<<" y = "<<y<<" max = "<<z<<endl;n = max(a, b, c);cout<<"a = "<<a<<" b = "<<b<<" c = "<<c<<" max = "<<n<<endl;return 0;
}int max(int a, int b)
{return a > b ? a : b;
}int max(int a, int b, int c)
{int temp;temp = a > b ? a : b;return temp > c ? temp : c;
}double max(double a, double b)
{return a > b ? a : b;
}

7.带默认值的形参

C++规定,默认参数只能放在形参列表的最后,而且一旦为某个形参指定了默认值,那么它后面的所有形参都必须有默认值。实参和形参的传值是从左到右依次匹配的,默认参数的连续性是保证正确传参的前提。
简而言之,就是,如果一个函数的形参中,有一个形参是没有默认值的,那么他的左边的形参也不能有默认值。
默认参数并非编程方面的重大突破,而只是提供了一种便捷的方式。在以后设计类时你将发现,通过使用默认参数,可以减少要定义的析构函数、方法以及方法重载的数量。
例如:

void func(int a, double b = 5.5, int c = 3);//合法
void func1(int a = 1, double b = 5.5, int c = 3);//不合法

看demo

#include <iostream>
using namespace std;void func(int x, int y = 0, int z = 0)
{cout<<x<<","<<y<<","<<z<<endl;
}int main()
{int x, y, z;cout<<"x,y,z:"<<endl;cin>>x>>y>>z;func(x);func(x, y);func(x, y, z);return 0;
}

8.内联函数inline

函数调用是有时间和空间开销的。程序在执行一个函数之前需要做一些准备工作,要将实参、局部变量、返回地址以及若干寄存器都压入栈中,然后才能执行函数体中的代码;函数体中的代码执行完毕后还要清理现场,将之前压入栈中的数据都出栈,才能接着执行函数调用位置以后的代码。

如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就就不容忽视。

为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。这种在函数调用处直接嵌入函数体的函数称为内联函数(Inline Function),又称内嵌函数或者内置函数。

#include <iostream>
using namespace std;inline int max(int a, int b);int main()
{int a[10];cout<<"please input 10 numbers :\n"<<endl;int i;for (i = 0; i < 10; i++){cin>>a[i];}int temp = a[0];for (i = 0; i < 10; i++){temp = max(temp, a[i]);}cout<<"the max number of the 10 numbers is "<<temp<<endl;return 0;
}inline int max(int a, int b)
{return a > b ? a : b;
}

说明:
 1) 内联函数不能含有循环语句,swtich语句;
 2) 内联函数必须在调用之前声明和定义;
 3)内联函数不能指定抛出异常类型;
 4)inline只是修饰函数向编译器提出内联请求,做不作为内联函数由编译器决定;

初入C++(一) c++中的一些基础和与c的一些区别相关推荐

  1. HoloLens2 初入——从Lut表中求解相机内参

    文章目录 HoloLens2 初入--从Lut表中求解相机内参 引言 HoloLens2 的相机们 基本条件 解畸变 ----------------------------------------- ...

  2. 初入职场新人一定要知道的五大晋升秘诀

    职场如战场.每年有很多人进入职场,就等于是进入了战场.初入职场,工作勤勉是基础,但仅仅这些是不够的,架构师米洛认为还需要注意以下5点,才可迅速融入公司,取悦老板,为将来的加薪升职埋下伏笔. 秘诀一:让 ...

  3. 【青春须早为,岂能长少年】一个初入职场程序员的阶段总结

    作者:陌北有棵树,Java人,架构师社区合伙人! 2019届毕业的小伙伴们,都应该已经入职快两个月了吧,从学校踏入工作,想必都有很多新的感悟和想法吧,我在这里写下我作为新人的的思考和总结,困惑与迷茫. ...

  4. 「每周论文推荐」 初入深度学习CV领域必读的几篇文章

    https://www.toutiao.com/a6718570271269192200/ 很多朋友都希望我们开通论文推荐和阅读板块,那就开吧,此专栏名为<每周论文推荐>.在这个专栏里,还 ...

  5. 初入android驱动开发之字符设备(一)

    大学毕业,初入公司,招进去的是android驱动开发工程师的岗位,那时候刚进去,首先学到的就是如何搭建kernel.android的编译环境,然后就是了解如何刷设备以及一些最基本的工具.如adb.fa ...

  6. 每一个div元素分析 php,PHP初入,div知识点整理(特效字体等元素的使用整理)...

    .nav{ width: 500px; height: 100px; border: 2px solid black; background-image: url(js/QQ图片20170815095 ...

  7. 【每周论文推荐】 初入深度学习CV领域必读的几篇文章

    很多朋友都希望我们开通论文推荐和阅读板块,那就开吧,此专栏名为<每周论文推荐>.在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题 ...

  8. 初入前端,面对一个项目应注意哪些?

    前言: 对于初入职场的前端小白来说,一整个项目来了,顿时感觉压力山大,张皇失措,也总会感到手忙脚乱.其实不用怕,拆分步骤,把每个步骤做好,做细,一切都迎刃而解,犹如顺藤摸瓜般畅快淋漓. 目录: 概念的 ...

  9. python while循环if_初入python 用户输入,if,(while 循环)

    python 基础 编译型: 一次性将所有程序编译成二进制文件. 缺点:开发效率低,不能跨平台 优点:运行速度快. :c ,c++语言 等等.... 解释行:当程序执行时,一行一行的解释. 优点:开发 ...

最新文章

  1. ant引入html页面,antd引入普通html使用,将ant Design本地化
  2. c++ 宽搜(倒水)
  3. Composer自动加载(一)
  4. 「leetcode」C++题解:15.三数之和 /3Sum 方法1:哈希法,方法2:排序+双指针,详细注释
  5. 新版 AS9100D:2016航空航天质量管理体系标准变化内容
  6. 程序员教你不背单词学英语!流利英语一周成!!!
  7. MYSQL基础教程书籍
  8. 自制“营销号视频生成器”
  9. autocad2007二维图画法_CAD中如何绘制二维图形
  10. 74ls163是同步清零吗_74LS163是具有同步清零功能的十六进制计数器,要
  11. 申论(基础题)之扫清阅读障碍和提取障碍
  12. python从文件中读取数据_【Python】从文件中读取数据
  13. java变量无法解析出现的原因_不明白为什么这个变量无法解析为一个类型? (JAVA)...
  14. linux 证书文件权限,Linux运维之道之admin1.4(权限和归属,LDAP认证)
  15. 《矩阵理论》大萌课程笔记 - 线性空间与子空间
  16. Swagger2常用注解说明
  17. Win10中用VS2019编译live555
  18. mysql dump -a -b_MySQL数据导出工具 mysqldump
  19. 关于计算机应用英语作文,计算机应用与办公自动化专业英文简历模板
  20. Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64)

热门文章

  1. 【触觉AI】麻省理工研发带550个传感器的触觉手套,通过触摸识别物体|湾区人工智能...
  2. 【量产】波士顿动力机器狗,当警犬不错,上战场。。。
  3. CPU版本文本分类代码 寒老师
  4. Springboot整合一之Springboot整合RabbitMQ
  5. python入门-廖雪峰 Python教程
  6. 蔚来难迎“第二增长曲线”?
  7. 加投35000瓶原价茅台 天猫双11今晚8点开售
  8. 自行更换iPhone 13屏幕会导致Face ID失效?苹果将发布软件更新解除限制
  9. 一加Nord 2外观渲染图曝光:小号“一加9” 价格有惊喜
  10. 超70家影视传媒单位联合500余位艺人倡议:立即清理未经授权短视频