《新标准C++程序设计》1.7-1.10(C++学习笔记2)
1、内联函数(inline关键字)
eg.inline int Max(int a,int b)
{
if(a>b)
return a;
return b;
}
当编译器处理调用内联函数的语句时,直接将整个函数体的代码插入调用语句处,但是会使最终可执行程序的体积增加。(这是以空间换时间)
2、函数的重载(使函数命名变得简单)
(1)定义:一个或多个函数,名字相同,然而参数个数或类型不同
(2)编译器判断形式:根据函数调用语句中实参的个数和类型来判断
eg.
int MAX(int a,int b);
int MAX(double a,double b);
double MAX(double a,double b,double c);
注意:
①若是名字相同,参数个数或类型也相同,只是返回值的类型不同,这不是重载,而是重复定义
②若调用时,实参的类型不符合任何一个定义的函数,则直接编译出错(二义性)
3、函数的缺省函数
C++中,定义的时候可以让最右边的连续若干个参数有缺省值,那么调用函数的时候,若相应位置不写参数,参数就是缺省值。
eg.void func(int x1,int x2=2,int x3=3){}
func(10);//等效于func(10,2,3)
func(10,8);//等效于func(10,8,3)
func(10,,8);//不等效,只能最右边连续若干个参数缺省
函数参数可缺省的目的在于提高程序的可扩充性。
即如果某个写好的函数要添加新的参数,而原先那些调用该函数的语句,未必需要使用新增的参数,那么为了避免对原先那些函数调用语句的修改,就可以使用缺省参数。
4、动态内存分配
(1)new运算符(返回值类型均为T)
①分配一个变量
P = new T;
T是任意类型名,P是类型为T的指针。这样的语句会动态分配出一片大小为 sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。
②分配一个数组
P = new T[N];
T是任意类型名,P是类型为*T的指针,N代表“元素个数”,可以是任何值为正整数的表达式,表达式中可以包含变量、函数调用等。这样的语句会动态分配出 N x sizeof(T)个字节的内存空间,这片空间的起始地址被赋值给P。
(2)delete运算符(释放new运算符动态分配的存储空间)
①delete 指针;
该指针必须指向new出来的空间。一片空间不能被delete多次。
②delete []指针;
该指针必须指向new出来的数组。如果没有[],会导致动态分配的数组没有被完全释放。
5、用string对象处理字符串
(1)定义string对象
如果不对其初始化,则其值是空串,即“”。
一个string对象的大小是固定的,即表达式 sizeof(string)的值是固定的,与存放的字符串的长度无关。
string对象中并不直接存放字符串,字符串会在别处开辟存储空间存放,string对象中只存放该内存空间的地址,或者再加上一些其他信息。
(2)string对象的运算
string对象之间可以用<、<=、==、>=、>运算符进行比较,还可以用 + 将两个string对象相加、将一个字符串常量和string对象相加、将一个字符数组和一个string对象相加,相当于进行字符串连接。+=运算符也适用于string对象。此外,string对象还可以通过[]运算符和下标存取字符串中的某个字符。
《新标准C++程序设计》1.7-1.10(C++学习笔记2)的更多相关文章
- 《新标准C++程序设计》3.8(C++学习笔记10)
友元 友元分为友元函数和友元类两种. 一.友元函数 在定义一个类的时候,可以把一些函数(包括全局函数和其它类的成员函数)声明为“友元”,这样那些函数就成为该类的友元函数,在友元函数内部就可以访问该类对 ...
- 《新标准C++程序设计》4.5(C++学习笔记15)
实例:长度可变的整型数组类 int main() { //要编写可变长整型数组类,使之能如下使用: CArray a; //开始里的数组是空的 ; i < ; ++i) a.push_back( ...
- 《新标准C++程序设计》4.6(C++学习笔记16)
重载流插入运算符和流提取运算符 流插入运算符:“<<” 流提取运算符:“>>” cout 是在 iostream 中定义的,ostream 类的对象. “<<” 能 ...
- 《新标准C++程序设计》4.4(C++学习笔记14)
运算符重载为友元函数 一般情况下,将运算符重载为类的成员函数,是较好的选择. 但有时,重载为成员函数不能满足使用要求,重载为普通函数,又不能访问类的私有成员,所以需要将运算符重载为友元. class ...
- 《新标准C++程序设计》4.1(C++学习笔记12)
运算符重载的概念和原理 一.运算符重载的需求 C++预定义的“+.-. * ./.%. ^ .&.~.!.|. = .<< >>.!= ”等运算符,只能用于基本数据类型 ...
- 《新标准C++程序设计》3.5(C++学习笔记8)
常量对象和常量成员函数 一.常量对象 如果希望某个对象的值初始化后就再也不被改变,则定义该对象时可以在前面加const关键字,使之成为常量对象. class CDemo { private: int ...
- 《新标准C++程序设计》3.9-3.10(C++学习笔记11)
一.C++程序到C程序的翻译 程序示例分析: C++: class CCar { public: int price; void SetPrice (int p); }; void CCar::Set ...
- 正确处理类的复合关系------新标准c++程序设计
假设要编写一个小区养狗管理程序,该程序需要一个“主人”类,还需要一个“狗”类.狗是有主人的,主人也有狗.假定狗只有一个主人,但一个主人可以有最多10条狗.该如何处理“主人”类和“狗”类的关系呢?下面是 ...
- 类的互相包含------新标准c++程序设计
#include<iostream> using namespace std; class A; class B{ public: void f(A* pt){}; } class A{ ...
随机推荐
- 条形码识别手持终端(PDA)人们每日触碰的科技
时尚达人的你,收快递物流时,毫无疑问在有时会好奇心,派送员腰部取出的那把“扫枪”,轻轻地一扫后,给你打开享有开拆快递物流的开心時刻.老湿机的你,是否会突然发觉,泊车交费时收费员哥哥已不找你许多零钱,只 ...
- 通过JAVA反射修改JDK1.6*当中DNS缓存内容
时间 2012-05-28 17:09:03 Taobao QA Team原文 http://qa.taobao.com/?p=15523 为了实现性能压测时的域名动态绑定功能,尝试通过java反 ...
- 题解 P3258 【[JLOI2014]松鼠的新家】
树链剖分板子题 先说点别的 小熊维尼啊,嘿嘿嘿. 写题经历 悲惨命运:树剖调了2天,一直90分,死活不AC,调出了心病,快下课时改了一下数据范围,A了--.(刚开始数组开了800100,改120010 ...
- 初级入门 --- web GL绘制点
" 万丈高楼平地起." 01基础知识 一.相关术语 图元 :WebGL 能够绘制的基本图形元素,包含三种:点.线段.三角形. 片元:可以理解为像素,像素着色阶段是在片元着色器中. ...
- jmeter用Stepping Thread Group 递增并发数
jmeter安装插件Stepping Thread Group 如图所示设置的时候,本以为是每2秒 按 1 2 3 4 递增的,总共请求应该是10个,可是运行后却请求了几十个. 这个是有关线程数是否就 ...
- springboot官网->pom.xml文件
springboot 2.1.6 pom.xml
- 040、Java中逻辑运算之短路与运算“&&”
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- redis简单的实现(java)
1.首先新建一个maven项目,在pom.xml中添加依赖 <dependency> <groupId>redis.clients</groupId> <ar ...
- mongodb单机版的安装和配置
首先根据操作系统下载MongoDB的相关安装文件 下载后上传到linux上,解压 将解压后的文件夹重新命名为monggodb4.0.1 命令mv 配置必要的文件夹mgdata存放运行数据,mglog存 ...
- 六十六、SAP中代码格式化功能(SHIFT+F1)
一.在Delphi或PHP中,都有代码格式化工具,SAP中也有,如图 二,点击之后,没有任何反应,提示功能没有开启 三.在实用程序->设置中,选择好相关内容 四.勾选自己的相关设置 五.再点击代 ...