【无标题】

本文介绍了C++中布尔类型的赋值方式,内联函数的优化原理及使用注意事项,函数的重载概念与规则,参数缺省的设置方法,引用作为变量别名的用法,命名空间的作用以及定义,字符串类的基本操作,类的权限控制,构造函数和析构函数的角色,以及拷贝构造函数的调用场景和重要性。
摘要由CSDN通过智能技术生成

布尔类型

  • 赋值:两种方式

a. 直接赋值:true/false

b. 数字赋值:非零为真 (会溢出,不可以在存储时使用,可以在判断时使用)

内联函数

  • 含义:

  • 将内联函数中的代码块复制到调用处,用空间换取时间,即内存膨胀

  • 减少了出入栈的时间,增大了程序代码段的容量

  • 声明方式:

inline type function();
  • 注意使用时机:

  • 相应函数的代码块内容太多时不建议使用

  • 相应函数的内容中有循环时不建议使用

  • 内容简短.调用频繁时使用

函数的重载

  • 含义:

  • 编译器通过参数列表的不同来区分不同的函数,即函数的唯一性依赖于参数列表

参数列表的不同是指:对应位置上的参数类型不同
  • 注意:函数重载不可以考虑返回值

  • 用法:

  • 同名不同参:

int func(int x);
float func(int x);//不可重载!
/****************************/
int f(float x);
float f(int x);//可以重载
  • 特殊情况:

  • 调用重载的函数时如果传入参数和各个重载的参数列表==都相同或者都不相同==时会报错

函数参数缺省

  • 含义:为函数参数中的某一个或几个参数设定默认值,提高了代码的可重用性

  • 用法:

type function(type1 para1=default1,...);
//e.g.
int fun(int x=1,float val=5.14)//传参顺序从左-右,缺省值必须从后往前!!
{
    printf("%d,%f\n",x,val);
    return 0;
}
  • 注意事项:

  • 设定的默认值必须是个常量,不可以是变量

  • 默认值只需要在声明时给出

  • 函数的传参顺序从左-右,有缺省值的参数必须从后往前排列

  • 避免出现二义性,例如:

int fun(int x=1,float val=5.14);
int fun();
int main()
{
    fun(1,1.1);
    fun(); //无法确定/区分重载类型!
    return 0;
}

引用

  • 含义:

  • 给变量/对象其一个别名

  • 用法:

 int n=0;
 int& a=n;//小名在前,真名在后
  • 注意事项:

  • 定义引用时必须初始化

  • 小名在前,真名在后

命名空间

  • 含义:

  • 为命名划分集合,有些变量/对象名字会重名,在使用时指定集合即可

  • 用法:

  • namespace NAME

namespace NAME1
{
    int number;
    int func();			//局部函数
}
  • 可以嵌套定义

namespace NAME1
{
    namespace NAME1_1	
    {
        int number=114;
    }
}
  • 可以起别名

namespace n=NAME1;//起别名,命名空间过长时使用
  • 访问方式:作用域符号::加变量/对象/成员名字

NAME1::number
  • 注意事项:

  • 不能在函数内定义命名空间

  • 重复定义命名空间时(命名污染)会自动合并

  • 在重复定义之前,重复定义的命名空间的内容不会被合并(代码的顺序执行)

  • 不同命名空间的成员具有不同的内存/含义

字符串类

  • 含义:字符串类,比普通的字符串高级,具有自己的函数

  • 用法:

  • ==额外==包含头文件#include <string>

  • 直接赋值:

string str;
str="hello";
  • 取长度的函数:str.length()

  • 直接判断相等:(bool)str1==str2

  • 取指定位置上的字符:char ch=str.at(INDEX)

  • 注意事项:using std::string;

  • 三种权限:

  • public: 共有的,类内外均可访问

  • private: 私有的,只有类内可以访问

  • protected:保护的,其子类可以访问

  • 用法:

  • 成员权限关键字可以重复,有效区域至下一个权限关键字出现为止

  • 成员函数可以先声明,然后在外部实现

  • 注意事项

  • 成员函数在类内定义则是内联函数

  • 必须实例化之后再用

  • 定义之后要加分号

构造函数

  • 含义:

  • 是成员函数

  • 负责对象的初始化

  • 特点:

  • 创建对象时会自动调用

  • 函数名和类名相同

  • 没有返回值类型

  • 参数表不作要求

  • 可以重载(比如拷贝构造函数)

  • 用法:

  • 无参构造:

class NAME
{
public:
	NAME();
};
NAME::NAME()
{
}
  • 带参构造:用成员初始化列表

class NAME
{
public:
	int data1;
	int data2;
	NAME();
};
NAME::NAME():data1(114),data2(514)
{
}
  • 注意事项:

  • 不定义构造函数则默认有一个构造函数 (缺省)

  • 类外定义对象必须是共有的

  • 如果定义的构造函数都是带参数的,则由系统缺省的无参构造函数会自动失效

  • 必须带参实例化对象

  • 最先构造的对象最后析构

拷贝构造函数

  • 含义:

  • 构造函数的重载,从一个对象得到另一个完全相同的对象

  • 调用时机: (重点)

  • 用一个对象给另一个对象初始化

  • 任意一个函数的参数、返回值是类的对象时调用拷贝构造

  • 过程:

  • 实参的值拷贝给形参;

  • 返回值有接受体时:函数栈区在运行结束时会被释放,则返回一个拷贝

  • 没有接受体时:直接析构

总结:

a. 类的对象需要拷贝时调用\

b. 涉及到 某一类的对象在不同内存区块(堆/栈)之间转移时会自动调用(系统默认给,可以自定义)

  • 用法:

  • 定义:classname(classname& object,...)

  • 注意:

  • 拷贝时要注意对象里的指针,拷贝后的指针和被拷贝对象的指针会指向同一块内存!

应该重新申请内存,并指向;
  • 其第一个参数必须是属于本类的对象的引用

析构函数

  • 含义:

  • 对象生命周期结束时自动调用

  • 负责内存清理等工作

  • 用法:

  • 声明: ~classname();

  • 注意事项:

  • 没有返回值类型

  • 没有参数

  • 必须是共有的 public

  • 一个类有且仅有一个析构函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值