c to c++进阶

来源:互联网 发布:淘宝在哪买二手手机 编辑:程序博客网 时间:2024/06/05 07:41

nullptr c++的NULL,c++使用nullptr
bool
c语言true为1,0为false
c++0为false,非0为true
int 可转换bool 非0转换为1
bool原生布尔
_Bool,c98加上的,==bool
命名空间
namespace
划分作用域,函数名相,命名空间不同,结果不同。
无::表示在全局变量中
std::表示在std中
头文件三种stdio.h .h后缀为c标准 c继承来的
cstdio cXXX…符合c++标准的c语言标准库
iostream c++标准库
stdafx.cpp visual studio 编译器特有,可有可无

重载
c++命名粉碎机制
函数名可以相同,参数不能相同,参数的顺序可以不同,
编译器会按照函数名和参数重新生成函数名。
所以看上去相同函数名的函数实际上是不同的。
函数的重载可能会导致二义性
参数类型如果没有与之匹配的,会按照一定规则匹配相近的函数
//匹配的规则
1精准匹配
2提升匹配 (隐式转换) char - >int ,float -> double
3类型转换匹配 int->unsigned int
当匹配的规则相互冲突时会产生二义性!!!!
根据业务逻辑写重载的函数,不多也不少。

new&delete
类似于malloc和free
不同的是malloc和free是两个函数,new和delete是两个运算符
int *pNUm=new int(100);//int 100
delete pNum;
int *pArray=new int[10]; //数组的方式
delete[] pArrat; //以数组释放,确保释放干净

默认参数
c++支持默认参数c语言不支持

inline内联函数
把函数在当前使用的地方展开,减少调用函数时所开销的空间
主要作用是提高效率
类似于#define
define直接替换,100%展开,
inline由编译器决定是否展开,不一定成功,一般重复多次使用的小函数使用。递归调用,肯定不会展开。

类型转换
c++新出的
1.static_cat《int》(1,000001)//float转int c++风格的转换,并非强制转换,表示需要转换,安全性高。
2.const_cast<>//特定情况下使用,使const变成非const,移除对象的常量性,仍然不可修改内容,主要用于参数的匹配,避免语法上的错误。
3.reinterpret_cast<>强制转换,二进制层面。
4.cynamic_cast<>名称推导转换,多态使用。

引用
int & // 声明格式。
引用相当于变量的别名,类似于指针,传参使用引用
相当于阉割版的指针,指针可以修改,引用不可修改
所以不要 让引用指向指针,无意义。
ing fun(int &,int &)//传入引用名,也可变量名传入,自动变为引用,相当于传入参数的本身,可改变外部的值。
引用声明: int &abc=变量
//int &为引用,在等式左边,&为取地支符,等式右边。
//int *为指针声明
const int ==int const ! =int * const//const 结合为左结合
返回一个引用
arr[]={0,1,2}
int &Index(int index)return array[index];
//把引用作为返回值返回。

对象
编程中的对象属性要以当前项目的业务逻辑来抽象、定义,
和自然中的属性不同!!!!!
以变量代表属性,以函数实现方法。
声明一个类:
class MyClass
{
private://私有,外部无法访问。
//未写private时编译器自动划分到private
public://共有,提供外部访问,用他访问private。
MyClass()//和类名相同的函数为构造函数,无返回值,对象 创立时自动调用,消亡时调用析构函数。
//编译器会自动生成构造函数
//构造函数可带参数,带参数的构造函数声明时会覆盖带参数的构造
{new …//构造时new空间,析构函数时delete,确保安全}
~MyClass()
{}
};

1 0
原创粉丝点击