// 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. android:gravity 和 android:layout_Gravity属性

    LinearLayout有两个非常相似的属性: android:gravity 与android:layout_gravity. 他们的区别在于: android:gravity 属性是对该view中 ...

  2. 版本控制、SVN、VSS

    ylbtech-Miscellaneos: 版本控制.SVN.VSS 1.A,版本控制返回顶部 1, 版本控制(Revision control)是一种软体工程技巧,籍以在开发的过程中,确保由不同人所 ...

  3. qt opencv

    pro中加入如下代码. INCLUDEPATH += /usr/local/include \ /usr/local/include/opencv \ /usr/local/include/openc ...

  4. Gradle简介

    gradle跟ant/maven一样,是一种依赖管理/自动化构建工具.但是跟ant/maven不一样,它并没有使用xml语言,而是采用了Groovy语言,这使得它更加简洁.灵活,更加强大的是,grad ...

  5. C# 数据回滚

    public int GetExecteQuery(string strAddSql, string strUpdateSql, string strDelSql) { SqlConnection c ...

  6. POJ 2352 【树状数组】

    题意: 给了很多星星的坐标,星星的特征值是不比他自己本身高而且不在它右边的星星数. 给定的输入数据是按照y升序排序的,y相同的情况下按照x排列,x和y都是介于0和32000之间的整数.每个坐标最多有一 ...

  7. HDU1001 关于累加公式的隐性类型转换

    HDU 1001就卡了. 受到小白的启发遇到这样的循环题目直接转化成公式求解以优化时间.但是!我就是过不了! 问题代码: #include<stdio.h> int main() { in ...

  8. [HDU 1011] Starship Troopers (树形dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1011 dp[u][i]为以u为根节点的,花了不超过i元钱能够得到的最大价值 因为题目里说要访问子节点必 ...

  9. JDK的版本历史

    JDK1.5: 2004年发布----2006年结束 JDK1.6 2006年发布-----2010年结束 一看吓我一条,开始接触JDK都已经是2010年下半年了,可是那是学的就是1.5版本,知道工作 ...

  10. Mysql中的count()与sum()区别

    首先创建个表说明问题 CREATE TABLE `result` ( `name` varchar(20) default NULL, `subject` varchar(20) default NU ...