Happy剑指offer:第2章题目笔记

判断题1

涉及到的一个问题是类内赋值构造函数的传值问题。如果允许复制构造函数传值,就会在赋值构造函数内部递归一般的进行对复制构造函数的调用,最终必然导致栈溢出。

如果仔细观察就会发现,如果要是调用复制构造函数,赋值构造函数的输入参数必然是引用形式。

举例;

A(const A &other)

面试题1

自己在定义一个类的时候,对构造函数,仍然会有一点点的不确定。

尝试了一把运算符重载。感觉还好,注意的是

1. 输入为引用,输出为引用

2. 对于指针,注意分配内存和释放内存。

//offer1
class CMyString
{
public:
    CMyString(char* pData = NULL);//这个应该只能算是声明吧
    CMyString(const CMyString& str);
    ~CMyString(void);
    CMyString& operator =(const CMyString &str);
private:
    char* m_pData;
};
CMyString& CMyString::operator = (const CMyString &str)
{
    if (this == &str)
        return *this;

    delete[]m_pData;
    m_pData == NULL;

    m_pData = new char[strlen(str.m_pData) + 1];
    strcpy(m_pData, str.m_pData);
    
    return *this;
}

面试题2

singleton模式:即单例模式。数学与逻辑学中,singleton定义为“有且仅有一个元素的集合”

如果一个类和singleton模式相关联,那么毫无疑问,这是一个特殊类,因为这种类只有一个对象,所以称为单例,单个例子嘛。一般这种单例非常容易被外界访问。

优点:节约系统资源。

生成实例的方法是静态方法。

//offer2 实现singleton模式
class Singleton
{
public:
    static Singleton& GetInstance()
    {
        static Singleton Instance;
        return Instance;
    }
private:
    Singleton();
    Singleton(const Singleton& other);
    ~Singleton();
    Singleton& operator=(const Singleton& other);
};

面试题3

注意int* matrix只能是代表一维数组。思路知道之后这道题突然间变得好简单。

//offer3
bool Find(int* matrix, int rows, int columns, int number)
{
    bool IsFound = false;
    if (matrix != NULL && rows > 0 && columns > 0)
    {
        int row = rows-1;
        int column = 0;
        while (row >= 0 && column < columns)
        {
            if (matrix[row*columns + column] == number)
            {
                IsFound = true;
                break;
            }
            else
            {
                if (matrix[row*columns + column] < number)
                {
                    ++column;
                }
                else
                {
                    --row;
                }
            }
        }
    }
    return IsFound;
}

判断题2:

两个字符串均定义为char str[]类型的时候,判断两个字符串是否相等,需要判定两个是不是指向相同的内存空间。这个问题十分重要。并非内容一样就可以的。另一种:char* str就不存在这个问题。它们定义的时候会自动指向对应的内存地址的。

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。