剑指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. pymysql -转自https://www.cnblogs.com/chenhaiming/p/9883349.html#undefined

    PyMysql的几个重要方法 connect函数:连接数据库,根据连接的数据库类型不同,该函数的参数也不相同.connect函数返回Connection对象. cursor方法:获取操作数据库的Cur ...

  2. js数值大小判断的错误

    1.js中定义一个变量i,判断i的取值在[1,3]中的错误写法 if(1<= i <= 3) 假设js的值为4,浏览器在解析js时会先将1与4比较 ,显然1<= 4,返回结果为1,然 ...

  3. 求1!+2!+3!+......+n!的和 -----C++-----

    #include<iostream> using namespace std; int function(int x) { ; ;i<=x;i++) sum=sum*i; retur ...

  4. 数据仓库系列 - 缓慢渐变维度 (Slowly Changing Dimension) 常见的三种类型及原型设计

    在从 OLTP 业务数据库向 DW 数据仓库抽取数据的过程中,特别是第一次导入之后的每一次增量抽取往往会遇到这样的问题:业务数据库中的一些数据发生了更改,到底要不要将这些变化也反映到数据仓库中?在数据 ...

  5. css第四天

    四丶 补充:CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - displ ...

  6. python 并发编程 锁 / 信号量 / 事件 / 队列(进程间通信(IPC)) /生产者消费者模式

    (1)锁:进程之间数据不共享,但是共享同一套文件系统,所以访问同一个文件,或同一个打印终端,是没有问题的,而共享带来的是竞争,竞争带来的结果就是错乱,如何控制,就是加锁处理. 虽然使用加锁的形式实现了 ...

  7. 第九周博客作业 <西北师范大学| 周安伟>

    第九周助教作业 助教博客链接https://home.cnblogs.com/u/zaw-315/ 作业要求博客链接https://www.cnblogs.com/nwnu-daizh/p/10726 ...

  8. HDU - 1695 GDU

    莫比乌斯反演基础. 用rep 去掉重复的对数,rep一定是奇数( 因为有(1,1 ) ) #include <bits/stdc++.h> using namespace std; #de ...

  9. ASP.Net的工作线程与请求队列

    当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程. 一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求.如果一个同步请求成为 I/O bo ...

  10. Spring+Quartz集群环境下定时调度的解决方案

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...