C++学习笔记(二)疑点总结

c++命名空间,namespace,关键字之一,引入主要是更好的控制标识符的作用域,避免引起冲突

引用,就是取个别名,可以引用变量和函数,系统不会为引用开辟独立空间,同时,引用必须初始化,引用同时也可以作为函数的参数,比如在main函数中需要调用swap(int *p1,int *p2)并输出相应值,那么可以用swap(&a,&b),使用引用就不需要指针,swap(int &p1,int &p2),main函数直接使用swap(a,b),另外,引用可以作为函数的返回值类型,但要注意,不要返回局部变量的引用,返回值类型为引用,可以完成链式操作

内联函数:在编译阶段将内联函数中的函数体替换函数调用处,避免函数调用的开销

内联函数和宏函数的区别:宏函数在预处理阶段展开,内联函数在编译阶段展开

宏函数的参数没有类型,不能保证参数的完整性,内联函数的参数有类型,能保证参数的完整性

宏函数没有作用域的限制,不能作为命名空间、结构体、类的成员,内联函数可以。类中的成员函数默认都是内联函数,有时候就算加上inline也不一定是内联函数,这个由编译器决定,同时,内联函数不能存在任何形式的循环语句,不能存在过多的条件判断语句,函数体不能过大,不能对函数取地址。

函数重载:函数重载是C++多态的特性,同一个函数名代表不同的函数功能,同一个作用域,函数的参数类型不同,个数不同,顺序不同都可以重载,但是函数的返回值不同不能重载,因为调用的时候,编译器不能确定调用是哪个函数。

构造函数:当创建对象一个对象的时候,那么这个对象必须进行初始化,使用完,还得清理,初始化就是构造,清理就是析构,这两种方法会被编译器自动调用,如果不自己去编写,编译器会默认增加构造函数和析构函数,但这些函数不会做任何事情,所以如果编写类应该顺便将构造函数和析构函数编写出来。构造函数名和类名相同,不能有返回值,可以有参数,就是有参构造,对象开辟空间后,会去调用构造函数。

析构函数:和构造函数一样,只是函数前加~,先析构后释放空间,一般情况下,空的析构函数就足够,但是如果一个类有指针成员,这个类必须写析构函数,释放指针成员所指向的空间。

拷贝构造函数:本质是构造函数,调用时机,旧对象初始化新对象、普通对象作为函数参数、函数返回值为普通对象会调用拷贝构造函数,如果用户不提供拷贝构造函数,编译器会默认使用浅拷贝构造,如果用户定义了拷贝构造或者有参构造,就会屏蔽无参构造,如果定义了无参和有参构造,不会屏蔽拷贝构造。

Data data1(10);Data data2 = data1;//调用拷贝构造Data(const Data &data)

一旦实现了拷贝构造函数,必须完成赋值操作。

深拷贝构造:如果类中没有指针成员,不用实现拷贝构造和析构函数,如果有指针成员,那么必须实现析构函数释放指针成员指向的堆区空间,必须实现拷贝构造完成深拷贝动作,深拷贝也就是给对象的指针成员申请独立的空间。

对象成员:在类中定义的数据成员一般都是基本的数据类型,但类中的成员也可以是对象,叫做对象成员,对于这种情况,一般先调用对象成员的构造函数,再调用本身的构造函数,析构顺序相反,类想要调用对象成员有参构造必须使用初始化列表B(int a,int b):ob(a);其中ob是B的对象成员,a给了ob中的有参构造,b给了B中的有参构造。

对象数组:对象数组每个元素都会自动调用构造和析构函数,对象数组的初始化必须显示使用有参构造,且逐个元素初始化。

new创建动态对象:C++中解决动态内存分配的方案是把创建一个对象所需的操作都结合在一个称为new的运算符里,当new创建一个对象时,它就在堆里为对象分配内存并调用构造函数完成初始化。

Person *person = new Person;//无参构造

new表达式的反面是delete表达式,delete表达式先调用析构函数,然后释放内存。

申请过程中如果有中括号,中括号也得释放

静态成员:在类定义中,类的成员可以用关键字static声明为静态的,称为静态成员,不管这个类创建了多少个对象,静态成员只有一个拷贝,这个拷贝是所有对象共享的。

static修饰的成员 定义类的时候,必须分配空间  并且静态数据成员类外初始化,初始化不用加static。

单例模式设计:单例模式是一种常用的软件设计模式,在它的核心结构只包含一个被称为单例的特殊类,通过这个模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。

友元:有时候我们需要在类的外部访问类的私有成员,那么就需要用到友元函数,使用friend关键字声明友元,主要有友元函数,友元类(该类的所有成员函数都可以访问另一个类的私有成员),作为友元类需要注意,先声明需要友元的,然后再编写友元类,再编写需要友元的,最后编写友元类中的成员函数实现。这个成员函数需在类外实现。

继承中的构造和析构,构造顺序,先父类,如果父类中有成员对象,那么再成员对象,最后子类,析构顺序相反,子类调用成员对象以及父类的有参构造,必须使用初始化列表,初始化列表时,父类写类名称,成员对象用对象名,继承中成员如果出现重名,加作用域。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值