布尔类型、操作符别名、C++函数、动态内存分配(new\delete)、引用(day02)
六 C++的布尔类型
bool类型是C++中基本类型,专门表示逻辑值:true/false
bool在内存上占一个字节:1表示true,0表示false
bool类型可以接收任意类型和表达式的结果,其值非0则为true,值为0则为false 七 操作符别名(了解)
&& --》 and
|| --》 or
{ --》 <%
} --》 %>
... 八 C++函数
函数重载
strcpy(char*,const char*)
strcpy(char*,const char*,int)
)定义
在相同的作用域,定义同名的函数,但是它们的参数表必须有所区分,这样的函数构成重载关系。
注:重载和返回返回类型无关
)函数重载匹配
调用重载关系函数函数,编译器根据实参与形参匹配程度,自动选择最优的重载版本。
当前编译器的匹配原则 g++ V4.8.1:
完全匹配>常量转换>升级转换>降级转换>省略号匹配
)函数重载原理
C++编译器通过函数换名,将参数表的信息整合到新的函数名中,实现解决函数重载与名字冲突的矛盾
eg:
代码里面写的函数:
void func(int i,double d);
void func(int i);
编译之后函数名将改变:
func(int,double)-->_Z4funcid
func(int)-->_Z4funci 笔试题:函数声明中加入extern "C"作用?
要求C++编译器不会函数做换名,便于C程序调用该函数。
语法:
extern "C" void func(..){..}
----------------------------
extern "C"{
void func1(){}
void func2(){}
}
-------
函数的缺省参数(默认实参)
)可以为函数的部分参数和全部参数指定缺省值,调用该函数,如果不给实参,就取缺省值作为相应的形参值。
eg:
void func(int a,int b,int flag=){..}
int main(void){
func(,,);
func(,);
}
)缺省参数必须靠右,如果一个参数有缺省值,那么这个参数的右侧所有参数都必须带有缺省值。 )如果函数的定义和声明分开,缺省参数应该写在函数的声明部分,而定义部分不写。
void func(){..} -->函数的定义
void func(); -->函数的声明 函数的哑元参数
)定义:只有类型而没有变量名的形参称为哑元
eg:
void func(int a,int/*哑元*/){}
)使用哑元的场景
--》为了兼容旧代码
算法库:
void math_func(int a,int b){...}
使用者:
int main(void){
math_func(,);
...
math_func(,);
}
------------------------------------
升级算法库:
void math_func(int a,int=){...} --》操作符重载时,区分前后++/--(后面讲) 内联函数(inline)
//笔试题:inline关键字的作用
)定义
使用inline关键修饰的函数,表示这个函数是内联函数,编译器将尝试做内联优化,避免函数调用的开销,提高代码的执行的效率。
)适用场景
--》多次调用的小而简单的函数适合内联
--》调用次数极少获取大而复杂的函数不适合内联
--》递归函数不适合内联 注:内联只是一种建议而不是强制要求,能否内联主要取决于编译器,有些函数不加inline关键字修改也会被默认处理为内联,有些函数即便加了inline关键字也会被编译器忽略。
---------------------
笔试题:
)代码片段1
for(int i=;i<;i++)
for(int j=;j<;j++)
...
)代码片段2
for(int i=;i<;i++)
for(int j=;j<;j++)
...
---------------------
九 C++的动态内存分配
//笔试题:C++中new/delete和C中malloc和free区别
回顾C中动态分配
)分配:malloc()
)释放:free()
)错误:返回值
eg:
int* p = (int*)malloc(sizeof(int));
*p = ;
free(p);//避免泄露
p = NULL;//避免使用野指针 C++使用运算符分配动态内存
)分配:new、new[]
)释放:delete、delete[]
)错误处理:异常(后面讲)
eg:
//int* p = new int;//分配不初始化
//*p = 100;
int* p = new int();//分配同时初始化
delete p;
p = NULL;
-----------------
int* parr = new int[];//分配数组
parr[]=;
parr[]=;
...
delete[] parr;
parr = NULL;
--------------------------
十 C++的引用(Reference)
定义
)引用就是某个变量的别名,对引用的操作与对该变量的操作完全相同。
)语法规则
类型& 引用名 = 变量名;
注:引用在定义时必须初始化,而且初始化以后不能修改引用的目标。
注:引用类型和它所绑定的目标变量类型要一致
eg:
int a = ;
int& b = a;//b就是a的别名
b++;
cout << a << endl;//
int c = ;
b = c;//将c的值赋值给b(a)
cout << a << endl;// 常引用
)定义引用时加const修饰,即为常引用,不能通过常引用修改引用的目标。
const 类型& 引用名 = 变量名;
eg:
int a = ;
const int& b = a;//b就是a的常引用
b = ;//error
)普通的引用只能引用左值,而常引用也叫做万能引用,既能引用左值,也能引用右值。
==================
注:关于左值和右值
)左值:可以放在赋值运算符的左侧
-->普通变量都是左值
-->前++/--表达式结果是左值
-->赋值表达式的结果是左值
eg:
int a = ;
++a = ;//ok
cout << a << endl;//
++++++a;
cout << a << endl;//
eg:
int a = ,b = ;
int c = ;
(c = a) = b;//ok
cout << c << endl;// )右值:只能放在赋值运算符右侧
--》字面值常量
--》大多数表达式的值
eg:
int a = ,b = ;
(a + b) = ;//error,a+b的结果是右值
--》函数返回值
eg:
int foo(void){
int a = ;
return a;//分配临时变量=a
}
int main(void)
{
int res = foo();//函数调用结果是临时变量
cout << res << endl;//
int& r = foo();//error
const int& cr = foo();
return ;
}
布尔类型、操作符别名、C++函数、动态内存分配(new\delete)、引用(day02)的更多相关文章
- String类型_static成员_动态内存分配_拷贝构造函数_const关键字_友元函数与友元类
1:String类型 #include <iostream> using namespace std; int main() { //初始化方法 string s1 = "hel ...
- C++解析(25):关于动态内存分配、虚函数和继承中强制类型转换的疑问
0.目录 1.动态内存分配 1.1 new和malloc的区别 1.2 delete和free的区别 2.虚函数 2.1 构造函数与析构函数是否可以成为虚函数? 2.2 构造函数与析构函数是否可以发生 ...
- C++_类和动态内存分配3-构造函数中使用new的注意事项
如果在构造函数中使用new来初始化对象的指针成员时必须特别小心. 1 如果在构造函数中使用new来初始化指针成员,则应在析构函数中使用delete. 2 new和delete必须相互兼容.new对应于 ...
- C++指针与数组、函数、动态内存分配
C++指针 指针是用来存储地址的变量. 对于二维数组来说: a:代表的是首行地址: *a:代表的是首元素地址: **a:首元素: a+1:第二行地址: *a+2:首先*a是首元素地址,在首元素地址上+ ...
- 【转】DSP动态内存分配函数的使用
DSP里的动态内存分配,其分配的内存区域在在堆(heap)中.同时DSP里动态分配内存的函数还有calloc以及reclloc.这些动态分配的内存放置在.system段的全局池或堆(heap)中.因此 ...
- C++指针和动态内存分配
指针和动态内存分配 数组与指针 数组 数组名是一个指针常量. 数组名传递数据时,传递的是地址. 数组作为函数参数时不指定第一维大小. 对象数组 A a[2] = {A(1,2)}; 执行时先调用有参数 ...
- C程序的构成及动态内存分配
对一个程序,通常的理解就是,源码编译成机器代码,然后通过机器解释运行.不过是怎样编译成机器代码,和怎样运行的,无疑是个值得探讨的问题.怎样编译成机器代码,过程就是源码的编译.链接,编译器做了这些事.而 ...
- C++ 动态内存分配(6种情况,好几个例子)
1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...
- [UE4]C++ 动态内存分配(6种情况,好几个例子)
1.堆内存分配 : C/C++定义了4个内存区间: 代码区,全局变量与静态变量区,局部变量区即栈区,动态存储区,即堆(heap)区或自由存储区(free store). 堆的概念: 通常定义变量(或对 ...
随机推荐
- [LeetCode]Valid Sudoku解题记录
这道题考查对二维数组的处理,哈希表. 1.最自然的方法就是分别看每一个数是否符合三个规则.所以就须要对应的数据结构来 记录这些信息,判定是否存在.显然最先想到用哈希表. 2.学会把问题抽象成一个个的子 ...
- 黑马程序猿——————java基础
一.软件开发 软件是什么? 软件是简单的来说,计算机数据和指令的集合,数据(比方年龄,性别).指令及时告诉计算机怎样对他进行处理.计算机但是没有人那么聪明啊! 二.图形化界面(GUI),主要特点就是. ...
- poj 3461 字符串单串匹配--KMP或者字符串HASH
http://poj.org/problem?id=3461 先来一发KMP算法: #include <cstdio> #include <cstring> #include ...
- C++高精度性能測试函数
在实际software开发工作中.我们常常会測试某个module或者function的执行效率.或者是某个算法的时间复杂度(尽管时间复杂度一定程度上依赖于机器性能.但在同一台computer上,经过算 ...
- mongodb数据库的启动和停止
数据库的启动和停止是数据库最主要的操作,也是数据库可以提供服务和被连接管理的前提条件.不同的数据库启动和停止的方式有一些差异.但也有同样之处,启动和关闭也必然会和数据库的进程有关 ...
- vijos P1459车展
P1459车展 Accepted 标签:数据结构 平衡树数据结构 堆重游SC theme Park 描述 遥控车是在是太漂亮了,韵韵的好朋友都想来参观,所以游乐园决定举办m次车展.车库里共有n ...
- Delphi研究,对全局变量函数与OOP编程关系的一点体会 good
感叹:设计VCL的人真是神人啊,感觉比Pascal编译器的设计人还要牛很多,把整个Windows架构理了一遍,封装的如此之好,复用的如此之好(以至于Delphi的控件满天飞,使用还特别容易),简直惊为 ...
- ASP.NET快速开发框架不得不做的几个功能、高大上档次后台管理UI界面
俗话说磨刀不误砍柴工,确实,一早上花一个小时去磨刀一天下来肯定能多砍很多柴.我们做软件开发也是同样的道理,有套好开发框架在手里,开发也是事半功倍.那么一套MVC快速开发框架至少得具有哪些功能才能帮我们 ...
- 【HDU 3085】 Nightmare Ⅱ
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=3085 [算法] 双向BFS [代码] #include<bits/stdc++.h> ...
- Vue开发入门看这篇文章就够了
摘要: 很多值得了解的细节. 原文:Vue开发看这篇文章就够了 作者:Random Fundebug经授权转载,版权归原作者所有. 介绍 Vue 中文网 Vue github Vue.js 是一套构建 ...