初入C++(一) c++中的一些基础和与c的一些区别
来源:互联网 发布:视频下载软件 vd 编辑:程序博客网 时间:2024/05/22 02:15
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;
或是
delete可以用于释放堆上的空间,语法如下:char *pstr = new char [50];
delete p;delete [50] pstr;
5.命名空间
在C++中我们经常会碰到"using namespace"等字符,namespace就是命名空间,而using 属于声明;
命名空间的概念
C++中采用单一的全局变量的命名空间,如果在一个空间中,两个变量或函数的名字一样,编译的时候就会冲突。命名空间就是为了解决C++中函数变量的命名冲突所采取的一种措施,能够解决多模块协同开发出现变量函数命名的冲突问题。
在这里面可以把命名空间理解成文件夹,如果你在hel1这个文件夹中编辑两个hello.cpp肯定会出问题,但是如果一个在hel1,一个在hel2这个文件夹中p,这个就不会出现冲突。
命名空间的必要性: 当程序比较大的时候,需要多人合作,命名空间就非常必要。
命名空间的概念
C++中采用单一的全局变量的命名空间,如果在一个空间中,两个变量或函数的名字一样,编译的时候就会冲突。命名空间就是为了解决C++中函数变量的命名冲突所采取的一种措施,能够解决多模块协同开发出现变量函数命名的冲突问题。
在这里面可以把命名空间理解成文件夹,如果你在hel1这个文件夹中编辑两个hello.cpp肯定会出问题,但是如果一个在hel1,一个在hel2这个文件夹中p,这个就不会出现冲突。
命名空间的必要性: 当程序比较大的时候,需要多人合作,命名空间就非常必要。
命名空间的定义
命名空间用namespace定义,格式如下:
namespace 命名空间名
{
命名空间生命内容
}
命名空间用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,这是最常用的命名空间,而不需要再引用该成员的命名空间。
在using 指令中,using后面必须跟关键字namespace,而且最后必须为命名空间名;
using 声明中,关键字后面没有namespace, 后面必须为命名空间的成员名。
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++中允许同名函数的存在,但是参数必须不同:可以是参数个数不同,或参数个数相同、但类型不同 -- 这就是函数的重载。
1) 内联函数不能含有循环语句,swtich语句;
2) 内联函数必须在调用之前声明和定义;
3)内联函数不能指定抛出异常类型;
4)inline只是修饰函数向编译器提出内联请求,做不作为内联函数由编译器决定;
#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),又称内嵌函数或者内置函数。
如果函数体代码比较多,需要较长的执行时间,那么函数调用机制占用的时间可以忽略;如果函数只有一两条语句,那么大部分的时间都会花费在函数调用机制上,这种时间开销就就不容忽视。
为了消除函数调用的时空开销,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只是修饰函数向编译器提出内联请求,做不作为内联函数由编译器决定;
阅读全文
0 0
- 初入C++(一) c++中的一些基础和与c的一些区别
- java 与c、c++的一些区别(基础)
- java基础--java和c的一些区别
- C/C++中的一些区别
- c与c++的一些区别
- C++和C的一些区别
- C语言和C++的一些区别
- Matlab与C/C++/Java的一些区别
- 《Ruminations on c++》c++ 和 c 的一些区别
- 【C/C++】对char* 和 char[]区别的一些理解
- 一些c语言基础!
- Linux C 中的一些基础命令
- [C++] C 与 C++的一些不同点
- C语言中的一些关键字(一)
- c/c++中的一些基础但必须熟记的知识
- c/c++中的一些基础但必须熟记的知识
- C中的一些函数
- [C语言基础]一些C语言小程序(一)
- Something Interesting
- EXT4 之superblock 结构体剖析
- 11_ARM汇编自学笔记指令系统之程序状态寄存器访问指令
- 物理DG常用维护
- 最新PADS中电源符号的更换方法
- 初入C++(一) c++中的一些基础和与c的一些区别
- Two Sum
- 1.struts2的工作流程
- bugku ctf 听首音乐 wirteup
- LeetCode之Find Minimum in Rotated Sorted Array II
- 码云平台和git的使用帮助
- (24)单例设计模式两种写法:饿汉式和懒汉式
- HDU.1874 畅通工程续 (dijkstra)
- "应用程序无法正常启动(0xc000007b)。请单击 确定 关闭应用程序。"解决方法