zoukankan      html  css  js  c++  java
  • 剑指offer PART 2

    剑指offer PART 2

    书点击自取 提取码: njku
    标签(空格分隔): 笔记


    C++知识点:

    1、面向对象的特性   2、构造函数 3、析构函数 4、动态绑定 5、常用的设计模式 6、UML图 7、算法(空间、时间 复杂度)

    Content of Q

    序号 题目 页数
    1 赋值运算符函数 25

    Q:下列程序为何会编译错误

    class A
    {
        private: 
            int value;
        public:
            A(int n) { value = n; }
            A(A other) { value = other.value; }
            void Print() { std::cout << value << std::endl; }
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        A a = 10;
        A b = a;
        b.Print();
        
        return 0;
    }
    

    A:

    在 A b = a 时调用拷贝构造函数,而拷贝构造函数 A(A other)中参数为实例,而此时实例 other 也没有创建,故需要先 A other = a;而此时会再一次调用拷贝构造函数,则会再一次调用 A other = a,依次循环...,所以此语句会陷入无限循环,故会编译错误。
    正确写法的拷贝构造函数的参数应为常量实例引用

    A( const A &other);
    

    Q1:赋值运算符函数

    题目:如下为类型的CMyString的声明,请为该类型添加赋值运算符函数。

    class CMyString
    {
        public:
            CMyString(char* pData = nullptr);
            CMyString(const CMyString& str);
            ~CMyString(void);
            
        pravite:
            char*  m_pData;
    };
    

    关注点:

    1. 是否把返回值得类型声明为该类型的引用,并在函数结束前返回实例自身的引用(*this),因为只有返回引用才可以允许连续赋值。若返回void,则无法进行连续复制
    2. 是否把传入的参数的类型声明为常量引用。若参数的非引用,而为实例,则形参到实参会调用一次复制构造函数。
    3. 是否释放实例自身的内存。若在分配新内存之前未释放自身已有的空间则会导致内存泄露
    4. 判断传入的参数和当前的实例(*this)是否为同一个实例,若为同一个则不进行复制操作,直接返回。

    初级程序的经典解法

    CMyString& CMyString::operator = (const CMyString &str)
    {
        if(this == &str)
            return *this;
        delet []m_pData;
        m_pData = nullptr;
        
        m_pData = new char[strlen(str.m_pData) + 1];
        strcpy(m_pData, str.m_pData);
        
        return *this;
    }
    

    Q1.1: C++中可以用struct和 class来定义类型。这两种类型的区别是什么?

    如果没有标注成员函数或者成员变量的访问权限级别,那么在struct中默认为public,而在class中默认的private。

    Q2:实现Singleton模式

    题目: 设计一个类,只能生成该类的一个实例

    https://blog.csdn.net/Rick1860/article/details/82984183

  • 相关阅读:
    Java学习之Math类理解
    Java学习之集合框架的迭代器--Iteratorjk及ListItertor接口
    Java学习关于随机数工具类--Random类
    集合框架学习之List接口
    Java学习关于集合框架的基础接口--Collection接口
    Java基础学习之数组基本属性和方法
    Java学习关于时间操作的应用类--Date类、Calendar类及其子类
    Java学习--异常处理及其应用类
    LR百分比模式
    lr函数之lr_eval_string()函数的使用学习
  • 原文地址:https://www.cnblogs.com/yulongzhou/p/10777516.html
Copyright © 2011-2022 走看看