名字空间
把全局的命名空间进行分割,可以创建一个个独立的命名空间防止相互之间的冲突
C语言中的空间划分
全局、局部、块
定义名字空间的方式
namespace name
{
}
名字空间的合并
同名的名字空间会自动合并
在同一个名字空间中的标识符必须是唯一的
定义与声明分开
即在名字空间中声明函数
namespace name
{
void func(void);
int num;
}
void name::func(void)
{
}
使用名字空间中的内容
作用域限定符(::)
在引用处 name::num
在全局 using namespace name;
在全局 using name::num;
名字空间的嵌套
namespace n1
{
int num;
namespace n2
{
int num;
}
}
嵌套中标识符可以重定义,使用时根据需要逐层解析
全局空间归属为匿名空间
在全局定义的标识符都属于这个匿名空间,匿名空间默认开放
如果函数中有同名的标识符把匿名空间中的屏蔽了,可以使用空的空间名加域限定符表示
不同命名空间中的同名函数不构成重载,同一作用域下的不同参数的同名函数叫重载
class
C++的 class 与 struct 一样,是一种复合数据类型
里面可以有变量来表达属性,函数用来表示行为
在C++的 class 与 struct,几乎没有任何区别
struct 中默认的访问属性是 public,class 中默认的访问属性是 private
在C++默认使用 class,以示与C语言中的 class 进行区分
构造函数
在创建对象时,自动调用的函数,在整个对象生命周期中,一定会被且只能被调用一次
在构造函数中,负责对成员变量的初始化、分配资源、设置对象的初始状态
构造函数可以有多个版本,这些不同的版本之间会构造重载,创建对象时的方式不同,给的参数不同,会调用相应的构造函数
如果类中没有定义构造函数,编译器会自动生成一个无参构造函数
一旦定义了其他版本的构造函数,无参构造就不会生成,因此为了防止无参方式创建对象出错,在定义构造函数时,至少要实现两个
无参构造未必无参,C++函数中可以有默认参数,如果有参构造全部设置了默认参数,就会和无参构造出现冲突,它们两个只能有一个存在
"编译器生成的XX函数"
不是真正意义上的函数,只是编译器作为指令的生成者,只要生成具有某些函数功能的指令即可,没有必须生成高级语言的语义上的函数
调用无参构造
Student stu <=> Student *stup = new Student;
创建对象数组,每个对象都会调用一次无参函数
如果类A中有成员类B,当执行类B的构造函数前会自动调用类B的无参构造
在类A中调用类B
类A(参数列表):成员类B(参数列表)
{
...
}
类型转换构造函数
用一个数据给对象初始化,默认会自动调用构造函数,达到类型转换的效果
使用方便,但会包容一些错误的存在,可以使用 explicit 禁止隐式转换的方式调用构造函数
默认实现自动类型转换构造函数
C++知识点小结(二)
猜你喜欢
转载自www.cnblogs.com/wannabeajoker/p/9489211.html
今日推荐
周排行