
C++
Prozzz777
嗨,你为什么那么努力?因为我想去的地方很远,想买的东西很贵,喜欢的人很优秀
展开
-
类和动态内存分配(1)
假设我们要创建一个类,其中有一个成员表示某人的姓,最简单的就是用字符串数组来保存,开始使用14个字符的数组,发现太小,保险的方法是使用40个字符的数组,但是当创建2000多个这个样的对象时,必定会造成内存浪费。通常使用string类,该类有良好的内存管理细节。但是这样就没有机会深入的学习内存管理了。c++在内存分配方面,采用这样的策略,在程序运行时决定内存分配,而不是编译时决定。使用new和de...原创 2018-11-14 21:42:28 · 307 阅读 · 0 评论 -
C++私有继承
继承关系指明了派生类和基类是is-a的关系,即派生类对象是一个基类对象。另一种包含关系是has-a关系,即包含对象成员的类。实现has-a关系的一种方法是包含,另一种方法是私有或保护继承。使用私有继承,基类的公有成员和保护成员将成为派生类的私有成员,基类的方法将不会成为派生类对象公有接口的一部分,但是可以在派生类的成员函数中使用。包含将对象作为一个命名的成员对象添加到类中,而私有继承将对象...原创 2018-12-03 21:46:56 · 618 阅读 · 0 评论 -
C++保护继承
保护继承是私有继承的变体:使用保护继承时,基类的公有成员和保护成员都将成为派生类的保护成员。和私有继承一样,基类的接口在派生类中也是可用的,但是在继承结构之外是不可用的。当从派生类派生出另一个类时,私有继承和保护继承之间的主要区别就呈现出来了。使用私有继承,第三代类不能使用基类的接口,这是因为基类的公有方法在派生类中变成了私有方法;使用保护继承,基类的公有方法在第二代中将变成受保护的,因此第三...原创 2018-12-03 22:22:19 · 3300 阅读 · 0 评论 -
C++中4个与类型转换相关的关键词分析
C++中4个与类型转换相关的关键词分别是:( 与通用的类型转换机制相比,它们能够提供更安全、更明确的类型转换)static_castreinterpret_castdynamic_castconst_cast1.dynamic_cast:处理基类到派生类的转换RTTI是运行阶段类型识别(Runtime Type Identification)的简称。这个特性让程序...原创 2018-12-14 17:26:13 · 323 阅读 · 0 评论 -
C++智能指针
智能指针是行为类似于指针的类对象,但是这种对象还有其他功能。常用的auto_ptr,unique_ptr和shared_ptr三种智能指针模板,可帮助我们管理动态内存分配。简单看看下面的例子:void remodel(string &str){ string *ps = new string(str); ... str = *ps; return;}这个函数是存在缺陷的...原创 2018-12-21 11:28:41 · 217 阅读 · 0 评论 -
C++单例模式
什么是单例模式:单例模式就是一个类只能实例化一次,即只能有一个实例化的对象的类怎么创建一个单例模式的类:先看下面的例子:class Car{public: Car() {} ~Car() {}};void main(){ Car c1; Car *pc2 = new Car;}显然上面的例子的类可有很多实例,要禁止多实例,如果把构造函数私有化,能不能行得通呢?cl...原创 2018-12-17 21:22:23 · 241 阅读 · 0 评论 -
STL标准模板库
泛型编程旨在编写独立于数据类型的代码。在c++中完成通用程序的工具是模板。当然,模板使得能够按泛型定义函数或类,而stl通过通用算法更近一步。为何使用迭代器?理解迭代器是理解STL的关键所在。模板使得算法独立于存储的数据结构,而迭代器使算法独立于使用的容器类型。...原创 2018-12-24 16:45:34 · 212 阅读 · 0 评论 -
移动语义和右值引用
左值引用:左值引用使得标识符关联到左值。左值是一个表示数据的表达式(如变量名或者解引用的指针),程序可获取其地址,最初左值可出现在赋值语句的左边,但修饰符const的出现使得可以声明这样的标识符,即不能给他赋值,但可获取其地址:int n;int *p = new int;const int b = 101;//can't assign to b,but &b is vaildi...原创 2018-12-25 21:18:19 · 311 阅读 · 0 评论 -
C++内存管理
转载:https://www.cnblogs.com/mrlsx/p/5411874.htmlhttps://blog.youkuaiyun.com/qq_36570733/article/details/80043321c++内存主要分为5个存储区:栈(Stack):局部变量,函数参数等,由编译器自动分配和释放,栈属于计算机系统的数据结构,进栈出栈有相应的计算机指令支持,而且分配专门的寄存器存储...转载 2019-02-23 11:52:43 · 164 阅读 · 0 评论 -
C++多重继承
多重继承(Multiple Inheritance)描述的是有多个直接基类的类。比如公有MI表示的也是is-a的关系。例如,可以重类B和类C派生出类D:class D :public B, public C{ ...};多重继承存在两个问题:从两个不同的基类继承同名方法(B、C中有同名的方法怎么处理);从两个或者更多相关基类那里继承同一个类的多个实例(类B 和类C都是从类A派生...原创 2018-12-05 22:25:16 · 238 阅读 · 0 评论 -
C++友元
友元类:什么时候希望一个类成为另一个类友元类呢?举个例子,假设需要编写一个模拟电视和遥控器的简单程序,定义了一个Tv类和Remote类表示。这两个类之间存在某种关系,电视机并非遥控器,反之亦然,所以公有继承is-a关系并不适用。遥控器也并非电视机的一部分,反之亦然,因此包含或私有继承和保护继承的has-a关系也不适用。事实上,遥控器可以改变电视机的状态,这表明应将Remote类作为Tv类的一个...原创 2018-12-08 13:59:59 · 185 阅读 · 0 评论 -
类和动态内存分配(2)
改进后的StringBad类://stringbad.h#include <iostream>#ifndef STRINGBAD_H_#define STRINGBAD_H_class StringBad {private : char *str; int len; static int num_strings; static const int CINLIM =...原创 2018-11-24 11:16:09 · 212 阅读 · 0 评论 -
类和动态内存分配(3)
定位new运算符号//main.cpp#include<iostream>#include<string>using namespace std;const int BUF = 512;class JustTest{private: string words; int number;public: JustTest(const string &a...原创 2018-11-24 16:59:02 · 288 阅读 · 0 评论 -
访问控制:protected
protected关键字:对于外部而言,protected和private成员是相似的,只能通过public的成员函数进行访问。两者的区别只有在基类的派生类中体现:派生类可以直接访问基类的protected成员而不能直接访问基类的private成员,即对于派生类而言,protected和public是相似的。...原创 2018-11-28 21:34:30 · 241 阅读 · 0 评论 -
成员初始化列表语法
一个类Classy,mem1,mem2,mem3都是这个类的数据成员,则类的构造函数可以使用以下的语法来初始化成员:Classy::Classy(int n, int m) :mem1(n), mem2(m), mem3(m*n + 2){ //...}上述代码等效于初始化成员变量:mem1=n,mem2=m,mem3=m*n+2;从理论上说,这些初始化工作在创建对象是完成的,此时还...原创 2018-11-25 10:47:55 · 578 阅读 · 0 评论 -
类继承-继承类的构造函数
派生类的构造函数:派生类不能直接访问基类的私有成员,必须通过基类提供的公有方法。派生类构造函数必须使用基类的构造函数。创建派生类对象时,先创建基类对象,因此基类对象应该在进入派生类构造函数之前被创建。c++使用初始化列表完成这项工作。Derived::Derived(int x,int y):Based(x){ m=y;}也可以这样:Derived::Derived(int x,...原创 2018-11-26 22:31:23 · 2393 阅读 · 0 评论 -
类继承-虚函数(1)
虚成员函数虚析构函数原创 2018-11-26 22:48:01 · 206 阅读 · 0 评论 -
类继承-虚函数(2)
关于指针和引用的兼容性:通常,C++不允许将一种类型的地址赋给另一终类型的指针,也不允许将一种类型的引用指向另一种类型。但是,在类继承中,我们看到了可以将派生了Derived对象的地址赋给基类指针Based*,或者将基类的引用Based&amp;amp;amp;amp;amp;指向派生类Derived对象,只是允许的,为什么呢?首先,公有继承确定了派生类对象和基类对象是一种is-a的关系(即Derived对象都是一个Base...原创 2018-11-27 22:48:39 · 314 阅读 · 0 评论 -
使用c++重命名文件
在编译完FPGA的版本后,需要把bit文件和cdc发给其他人进行测试,由于两个文件和FPGA工程同名,每次都要重命名,加上今天的日期,便于版本控制。以上就是需求。于是想到要不要写个脚本,一键运行改名,最先想到的是用bat脚本,感觉没学过太麻烦,于是想到用c++,刚好最近在看string类相关的,于是花了点时间弄了一个控制台程序。代码如下://filesrename.cpp#include &amp;...原创 2018-05-17 22:24:32 · 5674 阅读 · 0 评论 -
C++数据库连接池设计与实现
1.什么是数据库连接池后台开发中常用的技术,在操作数据库之前,先要获得数据库连接,然后用数据库连接去进行数据库的增删改查等操作。建立连接和销毁连接都是一笔很大的性能开销,因此产生了连接池的技术。连接池与线程池一样,都是一种资源池,专门用于处理共享资源的。它可以维护一定数量的连接不销毁,当有连接申请时,从池中取出供客户使用;使用完毕则释放归还池中;当池中连接的数量不足时,还可以创建一部分连接。...原创 2019-09-24 11:02:33 · 877 阅读 · 0 评论