
C++
Shawei_
这个作者很懒,什么都没留下…
展开
-
引用,this指针,构造,析构函数及运算符重载,友元函数
引用this指针构造函数析构函数运算符重载友元函数一,引用 在C语言中,我们了解到函数传递参数的方式有传值和传址。 传值 优点:函数的副作用不会影响到外部的实参 缺点:不能通过修改参数来改变外部实参 ———————————————————————— 传址 优点:节省空间,效率高,改变参数可以改变外部实参 缺点:指针不安全在前...原创 2018-04-19 15:52:38 · 429 阅读 · 0 评论 -
C++——多态
——基于VS2017编译器环境下 C++的三大特性:封装,继承,多态。 下面我们看看多态是什么: 多态概念:多态从字面的意思就是“多种状态”。但是在C++中,多态有着更广泛的含义。 从图中,可看出,多态分为静态多态和动态多态,静态多态中,还分有函数重载和泛型编程。动态多态就是有虚函数。 静态多态:静态多态是编译器在编译期间完成的,编译器根据函数实参的类型(可能会进行隐式类型的转换),...原创 2018-07-06 13:40:29 · 282 阅读 · 0 评论 -
C++——派生类的对象模型
——基于VS2017编译器环境下 一,单继承 二,多继承 三,菱形继承 四,虚拟继承 五,菱形虚拟继承一,单继承 Derived类是Base类的子类,它从Base类中继承了某些成员,成员函数。 下面,我们看看子类继承后,在内存中是如何存放的? 还有就是子类从父类中继承,那些东西是不可以继承的,那些是可以继承的? 代码如下:class Bas...原创 2018-05-16 21:41:56 · 1340 阅读 · 0 评论 -
C++——继承
我们知道C++的三大特性:封装,继承,多态。下面是对继承的一些总结和应用。 继承机制:是面向对象程序设计使代码可以复用的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能。 如:一个1.0版本的计算器,它有加法和减法的功能。而在实际运用中,我们发现还需要计算乘法和除法。这时我们就需要对计算器进行升级。那么升级后的2.0版本计算器,拥有加法,减法,乘法和除法的功能。为了方便,我们...原创 2018-05-15 18:16:24 · 254 阅读 · 0 评论 -
编译器什么情况下,合成构造函数?
我们知道,当我们要生成对象时,如果我们没有显式的定义构造函数,但是对象还是生成成功了。因为编译器会自动的为我们合成构造函数,然后调用构造函数生成对象。 那么我们可能会好奇,编译器会在什么情况下自动合成构造函数呢? 编译器感觉需要的时候,会自己合成构造函数。什么情况下,它会感觉需要呢? 第一种情况:A类有构造函数,B类中没有构造函数,B类中有A类对象作为私有成员。如果这...原创 2018-05-21 13:57:06 · 1291 阅读 · 0 评论 -
日期类的简单实现
1.要考虑到日期的合法性,如果不合法,置成1990.1.1 2.由于在日期类,没有用到资源的开辟,所以我们可以使用编译器自动合成的拷贝构造,赋值运算符重载等。 3.实现一个日期加上N天后,日期为多少 4.实现一个日期减去N天后,日期为多少 5.求两个日期之间相隔多少天代码如下:#include<iostream>using namespac...原创 2018-05-07 13:57:22 · 331 阅读 · 0 评论 -
C++动态内存管理(new/delete,new[]/delete[])
一,C语言中动态内存管理 C语言中使用了malloc/calloc/realloc/free进行动态内存管理,malloc/calloc/realloc用来在堆上开辟空间,free用来释放申请的空间。 malloc的原型,作用: calloc的原型,作用: realloc的原型,作用: 二,C++中动态内存管理 我们知道在C++中,我们还是可以使用C库中的上面的三个函数...原创 2018-05-05 13:45:13 · 318 阅读 · 0 评论 -
String类的简单实现
我们知道String类,如果调用编译器自己合成的拷贝构造,赋值运算符重载,会出现一块内存多个对象使用的问题,在释放对象的时候,一块内存就会多次释放,引起程序崩溃。如果不了解对该过程不了解的,请在博主C++栏中,看看————String类的深浅拷贝。下面是String类的简单实现,不调用C库中字符串函数:#include&lt;iostream&gt;using namespace st...原创 2018-05-09 21:02:26 · 424 阅读 · 0 评论 -
C++中String类的深浅拷贝,写时拷贝
1.String类,只给了构造函数和析构函数,拷贝构造函数和赋值运算符重载都是编译器合成。class String{public: String(const char* str = "") { if (NULL == str) { _str = new char[1]; _str = '\0...原创 2018-05-02 19:33:11 · 2623 阅读 · 0 评论 -
C++类型转换(static_cast,dynamic_cast ...)
标准C++中为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符。 static_cast reinterpret_cast const_cast dynamic_cast为了更好的理解C++中的类型转换,我们先讲讲我们在C语言中的转换。#include&lt;iostream&gt;void test(){ int i = 2; double d...原创 2018-08-31 00:23:34 · 773 阅读 · 0 评论