![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
LinuxC++
徐煜清
这个作者很懒,什么都没留下…
展开
-
C++程序发开特点
面向对象方法中的对象:是系统中用来描述客观事物的一个实体抽象与分类:1.分类所依据的原则——抽象2.抽象出同一类对象的共同属性和行为,形成类3.类和对象的关系:类型与实例的关系,犹如模具与铸件之间的关系封装:1.隐蔽对象的内部细节2.对外形成一个边界3.只保留有限的对外接口4.使用方便、安全性好继承:意义在于软件复用,改造原创 2017-12-23 17:59:35 · 180 阅读 · 0 评论 -
面试题中C++中const和static
const(1)const用来定义常量:const定义的常量编译器可以对其进行数据静态类型安全检查。(2)const修饰函数形式参数:当输入参数为用户自定义类型和抽象数据类型时,应该将“值传递”改为“const&传递”,可以提高效率。比较下面两段代码:1 void fun(A a);2 void fun(A const &a); 第一个函数效率低。函数体内产生A类型原创 2018-01-26 19:51:42 · 460 阅读 · 0 评论 -
构造函数中调用其他构造函数错误用法
#include using namespace std;class Test4_1{public: // 构造函数中不要调用其他构造函数,无法完成初始化操作 Test4_1(int a) { m_a = a; Test4_1(1, 2); // 匿名对象:新的对象 } Test4_1(int b, int c) { m_b = b; m_c = c;原创 2018-01-10 15:36:33 · 508 阅读 · 0 评论 -
C++类型转换(1)
C++中类型转换C++丰富的类型允许根据需求选择不同的类型,例如,将两个short值相加涉及到的硬件编译指令可能会与将两个long值相加不同的情况,C++自动执行很多类型转换。1.将一种算数类型的值赋给另一个算数类型的变量时,C++对值自动转换。2.表达式中包含不同的类型时,C++将对值进行转换。3.将参数传递给函数时,C++将对值进行转换。(1)初始化和赋值进行的转换C++允许一种类型的值赋给另原创 2018-01-18 21:22:46 · 438 阅读 · 0 评论 -
深拷贝与浅拷贝的深入剖析
浅拷贝,即在定义一个类A,使用类似A obj; A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。如果类中含有指针变量,默认的拷贝构造函数必定出错。用简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向原创 2018-01-18 22:11:56 · 107 阅读 · 0 评论 -
关于引用和指针
首先最近复习了一下C++中引用的概念。引用在C++中的内部实现是一个常指针。Type& name <–> Type* const name。C++编译器在编译过程中使用常指针作为引用的内部实现,因此引用所占用的空间大小与指针相同从使用的角度,引用会让人觉得只是一个别名,其实有自己的存储空间。这是C++为了实用性而做出的细节隐藏。谈一谈指针和引用的区别。 1.初始化要求不同。引用在创建的同时必须初始原创 2018-02-02 23:05:45 · 300 阅读 · 0 评论 -
STL六大组建 容量 迭代器 算法
#include #include #include #include //排序时greater/less 的头文件using namespace std;void func1(){ vector v; v.push_back(1); v.push_back(3); v.push_back(2); v.push_back(5); v.push_bac原创 2018-01-19 12:48:11 · 158 阅读 · 0 评论 -
多态(4)
1. 空类class A{}; void main(){ printf("sizeof(A): %d\n", sizeof(A)); getchar();} 得到结果为:1。 类的实例化就是给每个实例在内存中分配一块地址。空类被实例化时,会由编译器隐含的添加一个字节。所以空类的size为1。2.虚函数class A{原创 2018-01-18 22:40:12 · 98 阅读 · 0 评论 -
多态(5)
父类指针指向子类的实例:1.无论父类里面有没有虚函数,都可以定义指向子类实例的父类指针.2.如果父类里没有虚函数,则使用父类指针,只能访问父类的成员,而不能访问子类里的成员.3.如果父类里的虚函数不是纯虚函数,且子类里没有重写该虚函数,则用父类指针访问该虚函数的时候,跟访问父类里的普通函数一样.4.如果父类里的虚函数不是纯虚函数,且子类里重写了该虚函数,则用父类指针访问该虚函数的时原创 2018-01-19 17:28:26 · 134 阅读 · 0 评论 -
单链表的逆序(循环与递归)
初始状态,prev是NULL,head指向当前的头节点A,next指向A节点的下一个节点B。首先从A节点开始逆序,将A节点的next指针指向prev,因为prev的当前值是NULL,所以A节点就从链表中脱离出来了,然后移动head和next指针,使它们分别指向B节点和B的下一个节点C(因为当前的next已经指向B节点了,因此修改A节点的next指针不会导致链表丢失)。逆向节点A之后,链表的状态如图原创 2018-01-19 20:07:50 · 689 阅读 · 0 评论 -
C和C++分配释放内存区别
0.属性new/delete是C++关键字,需要编译器支持。malloc/free是库函数,需要头文件支持。1.参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。2.返回类型new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作原创 2018-01-09 13:19:45 · 490 阅读 · 0 评论 -
对象初始化成员列表
#include using namespace std;class Point{public: Point(int x, int y) { m_x = x; m_y = y; printf ("Point 构造函数:%d, %d\n", m_x, m_y); } ~Point() { printf ("Point 析构函数:%d, %d\n", m_x,原创 2018-01-08 19:44:49 · 448 阅读 · 0 评论 -
对象和类
面对对象编程(OOP)是一种特殊的、设计程序的概念性方法,C++通过一些特性改进了C语言,使得应用这种方法更容易。下面是最重要的OOP特性:1.抽象2.封装和数据隐藏3.多态4.继承5.代码的可重用性过程性编程和面对对象编程采用过程性编程时,首先考虑要遵循的步骤,然后考虑如何表示这些数据,并不需要程序一直运行,用户可能希望能够将数据存储在一个文件中,然后从这个文原创 2017-12-30 20:15:52 · 90 阅读 · 0 评论 -
多继承的二义性 钻石结构
#include using namespace std;class Parent{public: Parent (int a) { this->a = a; cout << "Parent 构造函数被调用" << endl; }public: int a;};class Parent1 :public Parent{public: Parent1 (原创 2018-01-11 22:59:05 · 208 阅读 · 0 评论 -
多态(1)
一、问题的引出1.如果子类定义了与父类中原型相同的函数会发生什么?#include using namespace std;class Parent//定义一个父类 {public: void print() { cout<<"I am parent"<<endl; }};class Child:public Parent//公有继承 即公有派生类 {publi原创 2018-01-15 20:20:46 · 111 阅读 · 0 评论 -
多态(2)
2.类型兼容行原则遇上函数重写类型兼容性规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都能解决。类型兼容规则所指的替代包括以下情况:1).子类对象可以当作父类对象使用2).子类对象可以直接赋值给父类对象3).子原创 2018-01-15 20:55:25 · 149 阅读 · 0 评论 -
多态(3)
一、面对对象新需求面向对象的新需求:据实际的对象类型来判断重写函数的调用,父类指针指向的是父类对象则调用父类中定义的函数,父类指针指向的是子类对象则调用子类中定义的重写函数。解决的办法就是多态,面向对象中的多态:根据实际的对象类型决定函数调用语句的具体调用目标。C++中的多态支持:c++通过virtual关键字对多态进行支持,用virtual原创 2018-01-15 21:11:24 · 113 阅读 · 0 评论 -
类的封装与使用
1.类的访问控制关键字public和private,它们描述了对类成文的访问控制。使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数访问对象的私有成员。因此,公有成员函数是程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。访问程序直接访问数据被称为数据隐藏。C++还提供了第三个访问控制关键字protected,它与类继承有关。2.类的封装2原创 2018-01-07 18:28:08 · 8800 阅读 · 0 评论 -
单例模式
单例模式单例模式的作用:保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。单例模式的构造图为什么需要单例模式?1.在多个线程之间,比如初始化一次socket资源2.在整个程序空间使用全局变量,共享资源3.大规模系统中,为了性能的考虑,需要节省对象的创建时间。实现单例模式常用步骤1.构造函数私有化原创 2018-01-24 16:32:49 · 103 阅读 · 0 评论 -
实现构造数组拷贝程序
#ifndef _MyArray_H#define _MyArray_H#include using namespace std;class Array{public: Array(int size); int length(); void setData(int i,int j); int getData(int i); Array(const Array &obj);原创 2018-01-08 18:59:47 · 860 阅读 · 0 评论 -
关于宏和内联函数
宏:1.在C程序中,可以用宏代码提高执行效率。宏代码本身不是函数,但是用起来像函数。编译预处理器用拷贝宏代码的方式取代函数调用,省去了参数压栈、生成汇编语言最大的缺点就是容易出错,预处理器在拷贝宏代码时常常产生意想不到的边际效应。#define Max(a,b) (a)>(b) ? (a):(b)result = Max(i,j)+2;//扩展为result = (i)>(j):(i):(j)原创 2018-01-28 20:01:26 · 348 阅读 · 0 评论