GeekBand 随笔分享(二)

一、主题一:(三大函数)

 //-------------------------------------------解析------------------------------------------------------------------------

1》默认构造:

    如果没有为一个类显式地定义任何构造函数,编译器将自动为这个类生成默认构造函数。
    由编译器创建的默认构造函数称为合成的默认构造函数,它将依据如下规则初始化类中的成员变量:
   1.内置数据类型的初始化:
    内置数据类型是否自动初始化取决于变量定义的位置。如果变量在全局作用域内定义(即不在任何函数中)或定义为静态局部变量,则这些成员将被初始化为0。如果变量在局部     作用域内定义,则这些成员没有初始化。
   2.类类型变量的初始化:
    调用类的默认构造函数来初始化类类型变量。

 

2》拷贝构造:

    一般分为浅拷贝与深拷贝两种。深拷贝在实际编程中得到可靠的应用。最主要就是避免了在拷贝的过程中,一些内存泄露。

    深拷贝一般采用先申请内存空间,再进行拷贝工作。

 

3》拷贝赋值:

    拷贝赋值一般采用方法为:例如A ->B

    1. 把B的内容清理掉;

    2. 把A复制给B;

    当然赋值构造函数必须能够处理自我赋值的问题,因为自我赋值会出现指针指向一个已经释放的内存。

  

二、主题二:(堆、栈、内存管理)

1》new:

    new”是C++的一个关键字,同时也是操作符。

    我们使用关键字new在堆上动态创建一个对象时,它实际上做了三件事:获得一块内存空间、调用构造函数、返回正确的指针。如果我们创建的是简单类型的变量,那么第二步会被省略。example:  

class A
{
   int i;
public:
   A(int _i) :i(_i*_i) {}
   void Say()  { printf("i=%d/n", i); }
};
A* pa = new A(3);
那么上述动态创建一个对象的过程大致相当于以下三句话(只是大致上):
A* pa = (A*)malloc(sizeof(A));
pa->A::A(3);
return pa;

2》delete:

    它与new相类似 ,调用过程相反。

        

三、主题三:( 类模版、函数模版)

1》class template:

   如同函数模板一样,使用类模板使用户可以为类定义一种模式,使得类中的某些数据成员、某些成员函数的参数、某些成员函数的返回值能取任意类型。类模板是对一批仅仅成员    数据类型不同的类的抽象,程序员只要为这一批类所组成的整个类家族创建一个类模板,给出一套程序代码,就可以用来生成多种具体的类,(这类可以看作是类模板的实例),从    而大大提高编程的效率

   定义类模板的一般形式是:
 template <类型名 参数名1,类型名参数名2,…>
 class 类名
 {
  类声明体
 };
 例如:

  template <class T>
 class Smemory
 {…
  public:
  void mput(T x);
  …
 }

2》this 指针:

this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。例如,

调用date.SetMonth(9) <===> SetMonth(&date, 9)this帮助完成了这一转换 .

静态成员函数没有this 指针,所以它不能处理成员对象,它只能处理static数据.

    

    

 

posted on 2016-03-14 12:04  MSM-敏  阅读(140)  评论(0编辑  收藏  举报

导航