Visual Studio
C++基础
C++的include<iostream>包含的是流对象
而C语言的include<stdio.h>包含的是函数头文件
std::cout<<"Hello World"<<std::endl;
是C++的命名空间
就是说cout和endl都是定义在std这个命名空间当中的。
使用命名空间,程序员就会避免由于无意定义了和库中相同的名字而导致的名字冲突
C++标准库定义了4个IO对象
动态内存管理
C语言使用malloc()和calloc()进行动态内存分配,free()进行动态内存的释放,必须手工计算具体要分配多大的字节空间数,非常麻烦
C++使用new和delete实现动态内存的分配和回收
不需要计算空间大小,可以通过类型名自动计算并分配合适空间大小
示例:动态分配和释放单个数据的存储区
#include<iostream> using namespace std; int main() { int *p; p=new int; if(p==NULL) cout<<"Allocation failure!"<<endl; else { *p=15; cout<<*p; delete p; } return 0; } //或者直接在创建的时候赋值p=new int(15);
p=new int(98.5) 不会报错,会自动把98.5转换成int类型的
动态分配一维数组的存储空间
分配100个整数空间,将1到100存储在这100个连续的空间里。
#include<iostream> using namespace std; int main() { int i,*p; p=new int[100]; if(p==NULL) cout<<"Allocation failure!"<<endl; else { for(i=0;i<100;++i) p[i]=i+1; for(i=0;i<100;++i) cout<<p[i]<<' '; delete []p; } return 0; }
new和delete成对使用只是鼓励,不是强制,一般如果你的程序是运行一次就退出的,没有delete也不会有太大问题,main函数把未释放资源返回给操作系统处理,但如果是服务性进程,或者在循环中大量分配,需要delete,否则进程消耗内存越来越多,直到崩溃。
函数重载
两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器会根据实参的类型及个数的最佳匹配来自动确定调用哪一个函数
注意:不能以形参名字或函数返回类型的不同来区分函数
默认形参值必须按照从右向左的顺序声明。在有默认值的形参右边,不能出现无默认值的形参
内联函数
我们学过的宏定义能够实现函数重载类似的效果,而没有普通函数调用时的系统开销。
但是宏定义只是直接替换,有时会产生不可预料的副作用
用inline定义一个内联函数
同时又因为它是函数,会先进行函数的参数计算并进行参数类型的检查
注意事项
循环和switch语句执行效率较低,所以即使加了inline也会自动按照普通函数进行处理
引用
引用是c++独有的构造数据类型。
简单地说,引用就是给一个单元起一个别名。也就是说,引用与它所引用的变量共享存储单元。
独立引用
C++传递引用的方式
函数返回引用
类和对象
抽象定义了一个事物的本质,用封装来体现抽象,用类来实现封装
就是抽象出来的方法,用类来描述
类
声明类举例:时钟类
class Clock { int Hour,Minute,Second; void SetTime(int h,int m, int s); void ShowTime(); };
类成员的访问控制
数据封装的目的就是信息隐藏。为了达到信息隐藏,在C++类中,并非所有的成员都是对外可见的(或者说是类外可以访问的)
通过设置成员的访问控制属性来实现对类成员的访问控制。这些控制属性有:public、protected、private
类声明举例:时钟类
class Clock { public: void SetTime(int h,int m, int s); void ShowTime(); private: int Hour,Minute,Second; };
来源:CSDN
作者:hxxjxw
链接:https://blog.csdn.net/hxxjxw/article/details/103815134