【C++面试】常考题复习
// 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++面试】常考题复习的更多相关文章
- 【C++面试】常考题复习:排序算法
// Sort.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdlib.h> /*********** ...
- Sql面试常考题(持续添加)
最近萌生换工作的念头,于是上网下载了一些公司的面试题,重新看了面试题中的Sql部分,这些查询题有时候只是兜一个弯角来考,对于给EF惯坏的孩子来说还是有点难度的(给面试官鄙视了几下的结果),所以列出最近 ...
- leetcode Two Sum II - Input array is sorted <面试常考题>
题目描述 //二分查找的变形 用头尾两个指针进行 面试考察题 class Solution { public: vector<int> twoSum(vector<int> ...
- 前端一面/面试常考题1-页面布局:假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应。
题目:假设高度已知,请写出三栏布局,其中左栏.右栏宽度各为300px,中间自适应. [题外话:日常宣读我的目标===想要成为一名优雅的程序媛] 一.分析 1. 题目真的像我们想得这么简单吗? 其实不然 ...
- java面试常考题
基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库 ...
- PHP面试常考之会话控制
你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...
- python面试总结3(性能分析优化,GIl常考题)
python性能分析和优化,GIL常考题 什么是Cpython GIL Cpython解释器的内存管理并不是线程安全的 保护多线程情况下对python对象访问 Cpython使用简单的锁机制避免多个线 ...
- python面试总结2(函数常考题和异常处理)
python函数常考题 可变类型为参数 不能类型为参数 python如何传递参数 传递值还是引用呢?都不是.唯一支持的参数传递是共享穿参 Call by Object(Call by Object R ...
- PHP面试常考内容之Memcache和Redis(2)
你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...
随机推荐
- linux下的g++编译器安装
再debian下直接apt-get install gcc g++就可以了.按照类似的逻辑,再Fedora下yum install gcc g++ 报告无法找到g++包. 查了一下,原来这个包的名字叫 ...
- SG函数模板
这篇虽然是转载的,但代码和原文还是有出入,我认为我的代码更好些. 转载自:http://www.cnblogs.com/frog112111/p/3199780.html 最新sg模板: //MAXN ...
- C#(二维数组/集合)
一.二维数组int [,] array = new int[5,3];//有五个一维数组,每一个一维数组有3个元素 /打印出来一个“王”这个字string[,] wang = new string[, ...
- Linux中记录终端(Terminal)输出到文本文件(转载)
一,如何把命令运行的结果保存到文件当中? 这个问题太简单了,大家都知道,用 > 把输出转向就可以了 例子: [lhd@hongdi ~]$ ls > ls.txt [lhd@hongdi ...
- JMeter非GUI方式运行时动态设置线程组及传参
http://blog.csdn.net/selingchen/article/details/48106517 在使用JMeter进行性能测试自动化时,可能会有如下需求: 1.指定运行多少线程,指定 ...
- java小程序
1.水仙花数 这个数等于它的每位数的立方和 (三位数) 示例一: int i; int j; int k; for (i=1;i<=9;i++) { for (j=0;j<=9;j++){ ...
- [ActionScript 3.0] AS3调用百度地图API
package { import baidu.map.basetype.LngLat; import baidu.map.basetype.Size; import baidu.map.config. ...
- Java中this关键字在构造方法中的使用
1. Java中this关键字代表对象本身.用this关键字可以在类的内部调用属性和方法,这样代码的可读性比较高,因为它明确的指出了这个属性或方法的来源. 2. 同时在构造函数中也可以使用this关键 ...
- myBatis实例
一.搭建环境, 建立数据库 CREATE TABLE user( id ) not NULL AUTO_INCREMENT, userName ) DEFAULT NULL, userAge ) DE ...
- .NET 集合操作性能
如果单元格的内容是na(not applicatable),就表示这个操作不能应用于这种集合类型.