// 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. 3.函数Function

    所谓函数,本质上是一种代码的分组形式.我们可以通过这种形式赋予某组代码一个名字,便于日后重用是调用. function sum(a,b){ var c = a+b; return c; } 1.一个函 ...

  2. docker一些命令

    1.创建image(先创建Dockerfile) docker build -t xxx/xxx . 2.删除image docker rmi xxxxx(image id) docker rmi r ...

  3. eclipse中输入@符号自动提示Annotation

    将Eclipse中Content Assist中的Auto activation for java里.的后面加上@符号即可

  4. Redis各种数据结构内存占用测试

    启动时:(redis为空) 插入数据量都为100W(100W个key或者list中100W个值,或者1000个key,每个key中1000个值) String Key value # Memory u ...

  5. ubuntu 关机,重启,注销命令

    1关机命令 shutdown 好像ubuntu的终端中默认的是当前用户的命令,只是普通用户,因此在终端器中可以使用sudo -sh 转换到管理员root用户下执行命令. 1)shutdown –hel ...

  6. C#异步编程 z

    http://www.cnblogs.com/fangyz/p/5134018.html 从.NET4.5开始,用async和await关键字再加上Task.Run是一个非常不错的异步编程模型. 1. ...

  7. C++学习17派生类的构造函数

    基类的构造函数不能被继承,在声明派生类时,对继承过来的成员变量的初始化工作也要由派生类的构造函数来完成.所以在设计派生类的构造函数时,不仅要考虑派生类新增的成员变量,还要考虑基类的成员变量,要让它们都 ...

  8. js替换字符串中全部“-”

    alert("2014-03-22".replace('-','')); alert("2014-03-22".replace(/-/g,'')); 第一个运行 ...

  9. Delphi的内存管理及内存泄露问题 FastMM4

    这几天因为一个程序长时间运行出现比较严重的内存泄露问题,开始关注了一下内存管理方面的东西,以前也注意内存管理,创建了对象及时释放,但总有忘了处理的情况. 在Delphi中没有自动回收机制,所以一定要及 ...

  10. 关于 Python Iterator 协议的一点思考

    转:http://www.jianshu.com/p/dcf83643deeb Python 中有好几种容器或者序列类型:list tuple dict set str,对于这些类型中的内容,往往需要 ...