// CPP_Test@2014.10.22.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include <assert.h> /************************************************************************/
/* copyright (c) 2014 kernel_main
/* c++试常考点
/* 转载请注明出处:http://www.cnblogs.com/kernel0815/
/************************************************************************/ //strcpy 函数实现
char* strcpy(char* strDst, const char* strSrc)
{
assert((NULL!=strDst) && (NULL!=strSrc));//断言字符串地址非0
char* address = strDst;
while((*strDst++ = *strSrc++) != '\0');
return address;
} //strlen 函数实现
int strlen(const char* str)
{
assert(NULL != str);//断言字符串地址非0
int len = ;
while (*str++ != '\0')
{
len++;
} return len;
} //String 实现
class String
{
public:
String(const char* str =NULL); //构造函数
String(String & str); //拷贝构造函数
~String(void); //析构函数
public:
void print();
String& operator=(const String &str);//赋值函数 private:
char* m_data;// 用于保存字符串
}; String::String(const char* str)
{
if (NULL == str)
{
m_data = new char[];//得分点:对空字符串自动申请存放结束标志'\0'的空
assert(NULL != m_data);//加分点:对m_data加NULL 判断
*m_data = '\0';
}
else
{
int len = strlen(str);
m_data = new char[len+];
assert(NULL != m_data);// 若能加 NULL 判断则更好
strcpy(m_data, str);
}
} String::String(String & str)
{
int len = strlen(str.m_data);
m_data = new char[len+];//加分点:对m_data加NULL判断
assert(NULL != m_data);
strcpy(m_data,str.m_data);
} String::~String()
{
if (m_data)
{
delete[] m_data;
m_data = NULL;
}
} String& String::operator=(const String& str)
{
if (this == &str)//得分点:检查自赋值
{
return *this;
} //得分点:释放原有的内存资源
if (m_data)
{
delete[] m_data;
} int len = strlen(str.m_data);
m_data = new char[len+]; //加分点:对m_data加NULL判断
strcpy(m_data, str.m_data); return *this;//得分点:返回本对象的引用
} void String::print()
{
printf("pint: %s @ 0x%08x\n", m_data);
} //检测CPU是Little_endian还是Big_endian
//在实际内存中:
//0x12345678 四个字节(相当于32bit CPU下的一个ulong、int)的内存存放形式如下:
//Big_endian: 12 34 56 78 (将高序字节存储在起始地址, 低字节放高地址中, 高字节放低地址中)
//little_endian: 78 56 34 12 (将低序字节存储在起始地址, 低字节放低地址中, 高字节放高地址中)
int checkCPU()
{
union u
{
int a;
char b;
} c; //00 00 00 00
c.a = ; // 例子:如果我们将0x1234abcd写入到以0x0000开始的内存中,则结果为
// big-endian little-endian
// 0x0000 0x12 0xcd
// 0x0001 0x34 0xab
// 0x0002 0xab 0x34
// 0x0003 0xcd 0x12
// 同样这个例子中:将1(即0x00000001)写入:
// big-endian little-endian
// 0x0000 0x00 0x01
// 0x0001 0x00 0x00
// 0x0002 0x00 0x00
// 0x0003 0x01 0x00 return ( == c.b); //--如果是big_endian,
} int _tmain(int argc, _TCHAR* argv[])
{ String a("Hello World.");
String b(a);
String c = b;
char* p = NULL; String d(p);
d.print(); a.print();
b.print();
c.print(); printf("this computer is %s CPU\n", checkCPU()?"little_endian":"big_endian"); return ;
}

【C++面试】常考题复习的更多相关文章

  1. 【C++面试】常考题复习:排序算法

    // Sort.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> /*********** ...

  2. Sql面试常考题(持续添加)

    最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近 ...

  3. leetcode Two Sum II - Input array is sorted <面试常考题>

    题目描述 //二分查找的变形   用头尾两个指针进行  面试考察题 class Solution { public: vector<int> twoSum(vector<int> ...

  4. 前端一面/面试常考题1-页面布局:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。

    题目:假设高度已知,请写出三栏布局,其中左栏.右栏宽度各为300px,中间自适应. [题外话:日常宣读我的目标===想要成为一名优雅的程序媛] 一.分析 1. 题目真的像我们想得这么简单吗? 其实不然 ...

  5. java面试常考题

    基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...

  6. PHP面试常考之会话控制

    你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...

  7. python面试总结3(性能分析优化,GIl常考题)

    python性能分析和优化,GIL常考题 什么是Cpython GIL Cpython解释器的内存管理并不是线程安全的 保护多线程情况下对python对象访问 Cpython使用简单的锁机制避免多个线 ...

  8. python面试总结2(函数常考题和异常处理)

    python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object R ...

  9. PHP面试常考内容之Memcache和Redis(2)

    你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...

随机推荐

  1. Educational Codeforces Round 15 Road to Post Office

    Road to Post Office 题意: 一个人要从0走到d,可以坐车走k米,之后车就会坏,你可以修或不修,修要花t时间,坐车单位距离花费a时间,走路单位距离花费b时间,问到d的最短时间. 题解 ...

  2. C++多态的实现及原理详细解析

    C++多态的实现及原理详细解析 作者: 字体:[增加 减小] 类型:转载   C++的多态性用一句话概括就是:在基类的函数前加上virtual关键字,在派生类中重写该函数,运行时将会根据对象的实际类型 ...

  3. 控制WIFI状态

    1.控制WIFI public class MainActivity extends Activity { private Button startButton = null; private But ...

  4. Android 2.3 NFC简介

    Android 2.3加入了NFC(近场通讯)的支持.官网developer.android.com的英文介绍如下:Near Field Communications (NFC)Android 2.3 ...

  5. mysql处理上百万条的数据库如何优化语句来提高处理查询效率

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. 第5章 Posix 消息队列

    5.1 概述 消息队列可以认为是一个链表.有写权限的线程可往消息队列中放置消息,有读权限的线程可以从消息队列中取走消息. 消息队列和管道/FIFO的区别: (1)消息队列往一个队列中写消息前,并不需要 ...

  7. 20145305 《Java程序设计》第5周学习总结

    教材学习内容总结 1.设计错误对象都继承自java.lang.Throwable类 2.Throwable有两个子类:java.lang.Error与java.lang.Exception 3.Err ...

  8. [ActionScript3.0] 运用JPEGEncoderOptions或者PNGEncoderOptions保存图片到本地

    在flash player 11.3和air3.3之前,我们可以借助第三方类(JPEGEncoder)这些,很容易处理.现在,有了encode和JPEGEncoderOptions这些,处理位图数据就 ...

  9. 九度OJ1008

    这道题其实就是一个简单的Dijkstra变形,只是要考虑重边的情况. 当在更新图中点到起点的距离时,将花费p也计算在内:如果长度与之前计算的值相等,则再考虑此时花费p是否会更少,是的话则仍然要更新最短 ...

  10. (easy)LeetCode 231.Power of Two

    Given an integer, write a function to determine if it is a power of two. Credits:Special thanks to @ ...