剑指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

剑指offer PART 2的更多相关文章

  1. 剑指Offer面试题:1.实现Singleton模式

    说来惭愧,自己在毕业之前就该好好看看<剑指Offer>这本书的,但是各种原因就是没看,也因此错过了很多机会,后悔莫及.但是后悔是没用的,现在趁还有余力,把这本书好好看一遍,并通过C#通通实 ...

  2. 剑指Offer面试题:14.链表的倒数第k个节点

    PS:这是一道出境率极高的题目,记得去年参加校园招聘时我看到了3次,但是每次写的都不完善. 一.题目:链表的倒数第k个节点 题目:输入一个链表,输出该链表中倒数第k个结点.为了符合大多数人的习惯,本题 ...

  3. 《剑指offer》面试题12:打印1到最大的n位数

    面试题12:打印1到最大的n位数 剑指offer题目12,题目如下 输入数字n,按顺序打印出1到最大的n位十进制数,比如输入3,则打印出1,2,3一直到最大的三位数999 方法一 和面试题11< ...

  4. 《剑指offer》面试题11: 数值的整数次方

    面试题11: 数值的整数次方 剑指offer面试题11,题目如下 实现函数double power(double base,int exponent),求base的exponent次方, 不得使用库 ...

  5. 剑指 Offer 题目汇总索引

    剑指 Offer 总目录:(共50道大题) 1. 赋值运算符函数(或应说复制拷贝函数问题) 2. 实现 Singleton 模式 (C#) 3.二维数组中的查找 4.替换空格              ...

  6. 面试题目——《剑指Offer》

    1.把一个字符串转换成整数——<剑指Offer>P29 2.求链表中的倒数第k个结点——<剑指Offer>P30 3.实现Singleton模式——<剑指Offer> ...

  7. 剑指offer习题集2

    1.把数组排成最小的数 class Solution { public: static bool compare(const string& s1, const string& s2) ...

  8. 剑指offer习题集1

    1.打印二叉树 程序很简单,但是其中犯了一个小错误,死活找不到,写代码要注意啊 这里左右子树,要注意是node->left,结果写成root->left vector<int> ...

  9. 剑指Offer:面试题20——顺时针打印矩阵(java实现)

    题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数 字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1, ...

  10. 牛客网上的剑指offer题目

    题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 题目:请实现一个函数,将一 ...

随机推荐

  1. Hibernate 中出现 users is not mapped 问题

    Hibernate 中出现 users is not mapped 问题: 解答:HQL语句中表名应该是ORM映射的类名,所以应该改成:  (如果是用注解生成实体类,那就是注解的那个类)String ...

  2. MySql:SELECT 语句(六) CONCAT() 函数的使用

    一.计算字段 为什么要用计算字段? 1)想要在一个字段中既显示公司地址,又显示公司名称,但是往往这两个都不在一个字段中 2)列数据是大小写混合的,但是报表程序需要把他们全部按大写形式展示出来 3)需要 ...

  3. offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别

    offsetWidth/offsetHeight返回值包含content + padding + border,效果与e.getBoundingClientRect()相同 clientWidth/c ...

  4. [Solution] 985. Sum of Even Numbers After Queries

    Difficulty: Easy Question We have an array A of integers, and an array queries of queries. For the i ...

  5. js事件不能触发

    在span标签添加了个onclick事件,捣腾了半天触发不了,设置z-index:1000也没用. 最后发现是元素没设置宽度width导致的,压根儿没往这方面想. 因为添加onclick的span标签 ...

  6. [剑指Offer]29-顺时针打印矩阵-Java

    题目链接 https://www.nowcoder.com/practice/9b4c81a02cd34f76be2659fa0d54342a?tpId=13&tqId=11172&t ...

  7. Python2和3版本对str和bytes类型的处理

    python2中字符串分为2种类型: 字节类型:str,字节类型,通过decode()转化为unicode类型 unicode类型:unicode ,通过encode转化为str字节类型 字节类型 和 ...

  8. mysql学习--1.事务

    转载自孤傲苍狼的博客:http://www.cnblogs.com/xdp-gacl/p/3984001.html 四.事务的四大特性(ACID) 4.1.原子性(Atomicity) 原子性是指事务 ...

  9. LR 11录制IE起不来

    注:LR 11一般使用的是IE8或IE9 1.在录制脚本时Start Recoding中,默认如下,这样有可能IE打不开,需要更改路径,到对应的IE路径再尝试. 2.降低IE版本到IE8或者9 3.I ...

  10. centos 下安装java

    yum安装; 查看yum库中的java安装包 :yum -y list java* 安装需要的jdk版本的所有java程序:yum -y install java-1.8.0-openjdk* 查看j ...