剑指offer笔记(一)
2015-11-05 09:32
525 查看
1.定义一个空的类型,里面没有任何变量和成员函数,对该类型求sizeof,得到的结果是1,如果加构造和析构函数,结果还是1,如果是虚析构的话,就是4.(32位的系统)
32位系统,vc编译器中,short占 2 字节,int 、float、long 都占 4 字节,只有double 占8 字节
2.程序题:
#include <iostream>
using namespace std;
class my_test
{
public:
my_test(int n){a=n;};
my_test(my_test other){a=other.a;}
~my_test(){};
int add() const
{
return a;
}
private:
int a;
};
int main()
{
my_test my1(10);
my_test my2=my1;
my2.add();
return 0;
}由于拷贝构造函数没有用引用或者是指针,使用的是值传递,这样导致在进行拷贝构造是会无休止的一直拷贝下去,用指针的话,就是用地址传进去。
3.为拷贝构造函数添加赋值运算符
class my_test
{
public:
my_test(char *pData=NULL);
my_test(const char &str);
~my_test(){};
private:
char *m_pData;
};
my_test & my_test::operator =(const my_test &str)
{
if (this!=&str)
{
delete []m_pData;
改进版:考虑申请内存的时候没申请到,而且原数据也删除了,这样会出错。
my_test & my_test::operator =(const my_test &str)
{
if (this!=&str)
{
my_test my3(str);
char *temp=my3.m_pData;
my3.m_pData=m_pData;
m_pData=temp;
}
return *this;
}
4.c++中的struct和class的区别:两者实则没有什么很大的区别,只是struct默认是public,而class默认是private而已。在c#中,struct和class都是private,只是struct是值,class是引用,分配的内存位置不同,struct的实例在栈中,class的实例在堆中。
32位系统,vc编译器中,short占 2 字节,int 、float、long 都占 4 字节,只有double 占8 字节
2.程序题:
#include <iostream>
using namespace std;
class my_test
{
public:
my_test(int n){a=n;};
my_test(my_test other){a=other.a;}
~my_test(){};
int add() const
{
return a;
}
private:
int a;
};
int main()
{
my_test my1(10);
my_test my2=my1;
my2.add();
return 0;
}由于拷贝构造函数没有用引用或者是指针,使用的是值传递,这样导致在进行拷贝构造是会无休止的一直拷贝下去,用指针的话,就是用地址传进去。
3.为拷贝构造函数添加赋值运算符
class my_test
{
public:
my_test(char *pData=NULL);
my_test(const char &str);
~my_test(){};
private:
char *m_pData;
};
my_test & my_test::operator =(const my_test &str)
{
if (this!=&str)
{
delete []m_pData;
m_pData=NULL; m_pData=new char[strlen(str.m_pData)+1]; strcpy(m_pData,str.m_pData); } return *this; }这里考虑了四点:1.返回值是类型的引用,这样可以保证连续赋值。2.输入参数是常量和引用,保证输入数据被不会被改变,引用的话就可以省的在调用构造函数。3.先删除原来的数据,防止内存泄露。4.判断是否输入和原来的一样,一样的话,就不用再重新构造一份了。
改进版:考虑申请内存的时候没申请到,而且原数据也删除了,这样会出错。
my_test & my_test::operator =(const my_test &str)
{
if (this!=&str)
{
my_test my3(str);
char *temp=my3.m_pData;
my3.m_pData=m_pData;
m_pData=temp;
}
return *this;
}
4.c++中的struct和class的区别:两者实则没有什么很大的区别,只是struct默认是public,而class默认是private而已。在c#中,struct和class都是private,只是struct是值,class是引用,分配的内存位置不同,struct的实例在栈中,class的实例在堆中。
相关文章推荐
- JS实现slide文字框缩放伸展效果代码
- jquery getScript动态加载JS方法改进详解
- jquery 的 ajax的dataType,服务器返回了数据,但是succes:function(data)不执行
- JSP程序404错误的解决浅谈
- 快速搭建Web环境 Angularjs + Express3 + Bootstrap3
- 如何防止JavaScript自动插入分号
- JSP自定义标签实例(二)
- 每个程序员都会的 35 个 jQuery 小技巧
- javascript高级开发学习笔记一
- jQuery学习笔记之插件开发(4)
- jQuery学习笔记之插件开发(4)
- JSP自定义标签开发入门实例
- CSS 背景
- CSS padding 属性
- Html5精美时钟(Canvas实现)
- js正则表达式语法
- CSS border 属性和 border-collapse 属性
- javascript常用函数(2)
- JavaScript很牛
- javascript-dom