面向对象高级编程(上)-- 第二周学习笔记(Boolan)

1,拷贝构造函数

String s3(s1);  // 以s1为蓝本设定到s3上

2,拷贝赋值this

s3 = s2;

3,若是没有自定义拷贝构造和拷贝赋值,编译器会自动生成,可是默认的拷贝构造和拷贝赋值只会很忠实的一个bit一个bit的拷贝过去,对于复数够用;可是对于带有指针的则不是很好,由于对于指针赋值,是两个指针指到同一个地方,而不是真正的拷贝,这个是浅拷贝,并且容易引发内存泄漏
4,只要类中有定义指针,必定要写拷贝构造和拷贝赋值函数
5,析构函数
   当离开做用域的时候,析构函数会被自动调用
   若是没有这个析构函数,动态分配的内存就会形成内存泄漏了
6,字符串两种表示方法
  1,有长度和字符两个信息
  2,在字符的结尾有一个'\0'结尾
7,strlen计算的值不包含结束符
8,以下两种方式都调用了拷贝构造函数,行为一毛同样spa

 String s2(s1);
 String s2 = s1;
 而“String s2; s2 = s1;”调用的是拷贝赋值函数

9,检测自我赋值----效率高,不单单效率高,若是不这样,还可能会出错操作系统

if(this == &str)
    return *this;

10,stack(栈)
  是存在于某做用域(scope)的一块内存空间。例如当调用函数,函数自己即会造成一个stack用来放置它所接收的参数,以及返回地址。
  在函数本体内声明的任何变量,其所使用的内存块都取自上述stack。
11,heap(堆)
   是由操做系统提供的一块global内存空间,程序可动态分配从其中得到若干区块
12,array new 必定要搭配 array delete
13,static
  1,class里的static数据只有一份,银行户头,利率对于全部人都同样
  2,class里的static函数没有this,只能处理静态数据
  3,静态数据须要在外部定义
  4,静态函数能够经过object调用和经过class调用
14,把ctors放在private区
   静态数据只有一份
   静态函数被class调用
   返回对象调用setup函数
 Singleton指针

class A 
{
public:   static A& getInstance( return a; );   setup() { ... } private:   A();   A(const A& rhs);   static A a; ...
};

调用方式:A::getInstance().setup();code

Meyers Singleton
class A
{
public:
    static A& getInstance();
    setup() { ... }
private:
    A();
    A(const A& rhs);
    ...
};
A& A::getInstance()
{
    static A a;
    return a;
}

调用方式:A::getInstance().setup();
15,类模板会形成代码的膨胀
16,函数模板---类模板中的关键字typename和函数模板中的class是相通的,都同样对象

template <class T>
inline const T& min(const T& a, const T& b)
{
    return b < a ? b :a;
}

17,namespace
   防止重名blog

namespace std
{
    ...
}
相关文章
相关标签/搜索