c++

c++学习笔记第四天

2019-03-15  本文已影响12人  我就是一个垃圾

一、拷贝构造器

由己存在的对象,创建新对象。也就是说新对象,不由构造器来构造,而是由拷贝构造

器来完成。拷贝构造器的格式是固定的

class 类名

{

类名(const 类名 & another)

拷贝构造体

}

class A

{

A(const A & another)

{}

}

规则:

1 系统提供默认的拷贝构造器。一经实现,不复存在。

2 系统提供的时等位拷贝,也就是所谓的浅浅的拷贝。

3 要实现深拷贝,必须要自定义。

深拷贝与浅拷贝

系统提供默认的拷贝构造器,一经定义不再提供。但系统提供的默认拷贝构造器是等位

拷贝,也就是通常意义上的浅拷贝。如果类中包含的数据元素全部在栈上,浅拷贝也可以满

足需求的。但如果堆上(*)的数据,则会发生多次析构行为,含有指针的成员

二、对象数组

和普通数组差别不大

三、类成员函数的存储方式

不占据类的存储空间,也并不像数据成员那样有多个对象就存在多份,只有一份函数

四、c++返回对象和引用的区别

栈对象是不可以返回引用的。

除非,函数的调用者返回自身对象

五、this指针

系统在创建对象时,默认生成的指向当前对象的指针。这样作的目的,就是为了带来方

便。

作用

1,避免构造器的入参与成员名相同。

2,基于 this 指针的自身引用还被广泛地应用于那些支持

多重串联调用的函数中。

比如连续赋值

六、赋值运算符重载

用一个己有对象,给另外一个己有对象赋值。两个对象均己创建结束后,发生的赋值行

为。

定义

类名

{

    类名& operator=(const 类名& 源对象)

    拷贝体

}

class A

{

    A& operator=(const A& another)

    {

    //函数体

    return *this;

    }

};

规则

1 系统提供默认的赋值运算符重载,一经实现,不复存在。

2 系统提供的也是等位拷贝,也就浅拷贝,会造成内存泄漏,重析构。

3 要实现深深的赋值,必须自定义。

4 自定义面临的问题有三个:

1,自赋值

2,内存泄漏

3,重析构。

5 返回引用,且不能用 const 修饰。

a = b = c => (a+b) = c

上一篇 下一篇

猜你喜欢

热点阅读