您的位置:首页 > 编程语言 > C语言/C++

GeekBand C++ 面向对象高级编程(上) 第二周笔记

2016-08-01 12:20 351 查看
  说是第二周的笔记,其实已经拖了一周了。这周的内容有些多,参考和引用了博客和搜索引擎的资料做个整理。

  拷贝构造函数的定义为由编译器调用来完成一些基于同一类的其他对象的构建及初始化。唯一的形参必须是引用,普遍回家上const限制。这个函数经常用在函数调用用户定义类型的值传递及返回。

  C++里有三种对象需要调用此函数:

  1.一个对象作为函数参数,以值传递的方式传入函数体;

  2、一个对象作为函数返回值,以值传递的方式从函数返回;

  3.一个对象用于另外一个对象进行初始化

  如果在类中没有显示的声明一个拷贝构造函数,那么编译器会自动生成一个来进行对象之间非static成员的位拷贝(Bitwise Copy)。与C#不同的是,C#里边用已知的对象去初始化另一个对象,传递的是该已知对象的指针,而不是拷贝构造函数。

<span style="font-size:14px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace C_Sharp_structVSclass
{
class MyClass
{
public intval;
}
struct myStruct
{
public intval;
}
class Program
{
static void Main(string []args)
{
MyClass objectA = new MyClass();
MyClass objectB = objectA;
objectA.val=10;
objectB.val=20;
Console.WriteLine("{0}",objectA.val);
Console.WriteLine("{0}",objectB.val);
Console.ReadKey();
}
}
}</span>
  这里输出的会是“20,20”而不是C++里边的10,20、要区别来看。

  拷贝函数格式 :
<span style="font-size:14px;">拷贝构造函数的声明:
class 类名
{
public:
类名(形参参数)//构造函数的声明/原型
类名(类名&对象名)//拷贝构造函数的声明/原型
...
};
拷贝构造函数的实现:
类名::类名(类名&对象名)//拷贝构造函数的实现/定义
{函数体}</span>
  赋值函数需要返回一个对象自身的引用的,用于赋值之后的操作。而拷贝构造函数是构造函数,不返回值。

  赋值运算符合和拷贝构造函数都是用已存在的对象来创建另一个对象,区别于赋值运算符处理两个已有对象,即赋值前的对象应该是存在的;拷贝构造函数是生成一个全新的对象。

  析构函数羽构造函数相反,当对象所在的函数已经调用完,系统自动执行析构函数。

  以C++为例。析构函数数名也应于类名相同,只是在函数名前加一个位取反符,用来区别构造函数。它不带任何参数,也没有返回值,只能有一个析构函数,不能重载。

  析构函数格式 :

<span style="font-size:14px;">class <类名>
{
public:
~<类名>();
};
<类名>::~<类名>()
{
//函数体
};</span>
    构造函数,赋值函数,析构函数是每个类最基本的函数。每个类只有一个析构函数和赋值函数,但是有很多构造函数。C++编译器自动为X生成四个默认的函数:

<span style="font-size:14px;">X(void)                              //默认无参数构造函数
X(const X &x)                        //默认复制构造函数
~X(void);                            //默认的析构函数
X & operator = (const X &x);         //默认的赋值函数</span>


  堆栈都是一种数据项按序排列的数据结构,只能在一段对数据项进行插入和删除。

<span style="font-size:14px;">堆,队列优先,先进先出。
栈,先进后出。</span>


  *在string中包含构造函数,析构函数,赋值函数是基础。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: