命名空间
作用:防止变量或者函数等重名,引起访问不正确(fp重复定义错误)
定义命名空间:
namespace xxx
{
//里面可以包含变量、函数、类、typrdef、#define等。
print();
}
访问方式:(与接续操作符,还可以使用using)
命名空间::函数名()
xxx::print()
全局:
::print();
c++输入输出:cin、cout
bool类型变量输出:cout<<a<<boolalpha<<endl;
- 引用类型:
#include<iostream>
using namespace std;
int main()
{
int a=100;
int &b=a;//引用类型,取地址符b即为a的地址,b等同于a
cout<<&b<<" "<<&a<<endl;//两者输出地址相同
b=10;
cout<<a<<endl;
return 0;
}
- 引用类型特点:
1.引用被创建必须初始化(对应指针则可以在任何时候被初始化)
2.不能有空引用,引用必须与合法的存储单元关联(指针则可以为空指针)
3.一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指向的对象)
访问修饰符
函数重载
函数重载指的是,在同一个作用域下,可以具有同一个函数名,不同参数列表的函数。重载函数一般用来命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对程序可读性有很大好处。
特点:
1.相同作用域下,函数名相同参数列表不同(包括参数个数,参数类型)
2.只有返回值不同不算函数重载
※函数重载的规则:
函数名必须相同
参数列表必须不同(个数,类型,参数排列顺序等)
返回类型不做为判断是否重载的要素
仅仅返回值不同不足以为函数重
类
类:人类,动物类,植物类,学生类
对象:我,大黄,玫瑰花,学生
构造函数(太过复杂,具体会单独出一篇文章)
构造函数的名字和类名相同,没有返回值,可以重载(重载构造函数),不需要用户显示的调用,而是创建对象时自动执行。
构造函数的类型:
默认构造函数(缺省构造函数),(初始化构造函数)(有参构造函数)一般构造函数(重载构造函数),复制构造函数(拷贝构造函数),转换构造函数
class human()
{
human();//默认构造函数
human(int num,int age);//初始化构造函数
human(human&本类对象);//复制构造函数
huamn(int s);//形参是其他类型变量,且只有一个
析构函数
创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作,例如释放分配的内存、关闭打开的文件等,这个函数就是析构函数。
析构函数也是一种特殊的成员函数,没有返回值,不需要程序员显式调用(程序员也没法显式调用),而是在销毁对象时自动执行。构造函数的名字和类名相同,而析构函数的名字是在类名前面加一个
~ 符号。
注意:析构函数没有参数,不能被重载,因此一个类只能有一个析构函数。如果用户没有定义,编译器会自动生成一个默认的析构函数。
析构函数在对象被销毁时调用,而对象的销毁时机与它所在的内存区域有关。
在所有函数之外创建的对象是全局对象,它和全局变量类似,位于内存分区中的全局数据区,程序在结束执行时会调用这些对象的析构函数。
在函数内部创建的对象是局部对象,它和局部变量类似,位于栈区,函数执行结束时会调用这些对象的析构函数。
new 创建的对象位于堆区,通过 delete 删除时才会调用析构函数;
如果没有 delete,析构函数就不会被执行。
this关键字
this是c++的一个关键字,也是一个const指针,它指向当前对象,通过它可以访问当前对象所有成员。
- this区分成员变量和局部变量
- this代表调用当前函数的对象的地址常量
- 静态成员函数与普通成员函数的根本区别在于:普通成员函数有 this 指针,可以访问类中的任意成员;而静态成员函数没有 this 指针,只能访问静态成员(包括静态成员变量和静态成员函数)。