- 博客(9)
- 资源 (21)
- 收藏
- 关注
原创 C++写时拷贝的不同方案(String类)
String类的写时拷贝,不同方案分析。在使用String类时使用浅拷贝会产生一块空间析构多次的问题,所以产生了深拷贝,每次对对象进行值和空间同时拷贝,但这样会使用更多的空间。为了避免产生更多的空间,引入写时拷贝,当对空间进行更改时,检查是否有除自己外别的对象使用这块空间,若有,则自己重新开辟空间进行更改,不影响其他对象;若没有其他对象使用此空间,则说明只有自己使用此空间,就进行更改。此时引入
2017-07-24 16:27:25 272
原创 C++面试中String类的一种写法
#include #include class String{ public: String() : data_(new char[1]) { *data_ = '\0'; } String(const char* str) : data_(new char[strlen(str) + 1]) { strcpy(data_, st
2017-07-21 10:42:39 330
原创 C++动态内存管理
1.C的动态内存管理细节C语言使用malloc/calloc/realloc/free进行动态内存管理。且需要成对使用,开辟空间使用完之后一定要free掉。其中,malloc和realloc都是开辟一块空间,返回这块空间的起始地址。但二者有区别,malloc开辟空间返回首地址,realloc开辟空间,并且初始化这块儿空间,然后返回这块空间的首地址。2.C动态管理在C++中的缺陷
2017-07-21 09:04:30 218
原创 对string深拷贝浅拷贝的理解剖析
首先简单谈一下自己的理解:浅拷贝,即在定义一个类A,使用类似A a; A a1(a);或者A a1 = a; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝构造函数采用的是“位拷贝”(浅拷贝),而非“值拷贝”(深拷贝)的方式,如果类中含有指针变量,默认的拷贝构造函数必定出错。用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个
2017-07-19 10:30:00 382
原创 实现复数类及简单操作
复数类复数包含实部和虚部,表示为:a+bi 的形式复数可以比较两个复数的大小;两个复数是否相等;复数前置后置自增自减等操作。#include using namespace std;class Complex { public: //四个默认成员函数 //构造函数 Complex(double real=0.0, double image=0.0)
2017-07-10 16:23:00 894
原创 日期类及其各种操作
实现一个日期类,可以进行日期的各种操作。例如:日期的大小,相等或不等的比较;日期的前置后置自增自减;日期+天数;日期-天数;日期-日期;#include using namespace std;#include class Date { public: //4个默认的成员函数 //构造、拷贝构造、赋值语句重载、析构函数 //构造函数 Date(in
2017-07-10 16:11:26 241
原创 C++基础之引用与指针的区别与联系、常引用使用时应注意的问题
指针和引用主要有以下区别:引用必须被初始化,但是不分配存储空间。指针不声明时初始化,在初始化的时候需要分配存储空间。引用初始化后不能被改变,指针可以改变所指的对象。不存在指向空值的引用,但是存在指向空值的指针。注意:引用作为函数参数时,会引发一定的问题,因为让引用作参数,目的就是想改变这个引用所指向地址的内容,而函数调用时传入的是实参,看不出函数的参数是正常变量,还是引
2017-07-04 11:22:17 437
原创 在C++ 程序中调用被 C 编译器编译后的函数,为什么要加 extern “C”声明?
首先,作为extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。例如,如果模块B欲引用该模块A中定义的全局变量和函数时只需包含模块A的头文件即可。这样,模块B中调用模块A中的函数时,在编译阶段,模块B虽然找不到该
2017-07-02 18:45:18 323
原创 C++重载详解
在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如希望交换两个变量的值,这两个变量有多种类型,可以是 int、float、char、bool 等,我们需要通过参数把变量的地址传入函数内部。在C语言中,程序员往往需要分别设计出三个不同名的函数,其函数原型与下面类似:void swap1(int *a, int *b); //交换 int 变量的值void sw
2017-07-01 21:37:56 285
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人