C++
文章平均质量分 76
gogogo_sky
不积跬步,无以致千里;不积小流,无以成江海
展开
-
面向对象程序设计-------c++继承小结
1.继承的引入1.1继承的概念:继承:所谓继承,就是从先辈处得到属性和特征。类的继承就是新类从已有类得到已有的特性,新类被称为派生类,已有类被称为基类。可抽象为派生类是基类的具体化,而基类则是派生类的抽象。1.2继承的意义:继承机制是面向对象程序设计中避免代码重复的最重要的手段,它允许程序员对已有类进行扩展,增加功能。2.继承的定义格式2.1定义格式class 派生原创 2016-11-01 23:56:35 · 613 阅读 · 0 评论 -
结构体内存大小的求法(内存对齐)&&c++类大小同样适用
一、内存对其的原因:1. 平台原因:不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取特定类型的数据,否则抛出异常; 2. 性能问题:数据结构(尤其是栈)应该尽可能的在自然边界上对齐;员应在于,为了访问没有对齐的内存数据。处理器需要作两次内存访问;而对于对齐的内存处理器只需访问一次内存,就可以获得正确的数据; (以空间换区时间)二、结构体内存对齐规则:结构体的原创 2017-07-09 22:45:44 · 361 阅读 · 0 评论 -
模板实现动态顺序表(含容量检测函数的详细讲解)
一、模板实现动态顺序表 (1)要实现的成员函数和成员变量template<typename T>class SeqList{public: SeqList();//构造 SeqList(const T& seqlist);//拷贝构造 SeqList& operator=(const T& seqlist);//赋值运算符重载 ~SeqList();//析构原创 2017-07-11 01:30:10 · 456 阅读 · 1 评论 -
c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)
重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!!综述:一、重载:(1) 概念:在同一个作用域内;函数名相同,参数列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),返回值类型可相同也可不同;这种情况叫做c++的重载!注意:c语言没有函数重载的机制;详见:http://blog.csdn.net/gogogo_sky/article/deta原创 2017-06-05 20:22:30 · 10704 阅读 · 2 评论 -
继承(一)
一、c++的三大特性:封装,继承,多态 (1)封装的实现:通过访问限定符(private和protected)修饰类内成员,隐藏类内部的方法实现和数据; (在类外:通过类的对象进行访问,public成员可以在类外被访问,而private和protected成员不可以) (在类内:成员函数可以任意访问成员变量和其他成员函数,除了静态成员函数和静态成员变量) 二、本文主讲c++的继承特性;(1)原创 2017-06-01 12:43:59 · 322 阅读 · 0 评论 -
虚函数
一、虚函数:(1)虚函数的概念:类的成员函数前面加virtual关键字,则这个成员函数称为虚函数。 (2)virtual关键字使用的域 :virtua 只在类体内使用;就是说: 如果在类外定义虚函数,那么只能在类内声明函数时加virtual,类外定义函数时不能加virtual。(3)那些函数可以定义为虚函数:只有类的成员函数才能定义为虚函数。 注意:*静态成员函数不能定义为虚函数(不含this指原创 2017-06-14 23:50:15 · 547 阅读 · 0 评论 -
类的静态成员
关于类的静态成员,我们需要知道以下几点: 类里面static修饰的成员,成为静态类成员。 类的静态成员是该类型的所有对象对象所共享。 (1)类的静态成员是属于类而不属于对象,所以他不是类的单个对象所有。(2)静态成员只存在一个,不像普通的成员,每创建一个对象,就会创建一组普通的成员。(3)静态成员变量的初始化不能在类中,肯定是不能在构造函数中,只能在类外并且在main函数之前,按照这样的原创 2017-06-28 00:20:30 · 719 阅读 · 0 评论 -
【c++三大特性之一】---多态及其实现原理
一、多态的总体认识:多态就是多种形态,C++的多态分为静态多态和动态多态。 (1) 静态多态:就是重载,因为是在编译期决议确定,所以称为静态多态。 http://blog.csdn.net/gogogo_sky/article/details/72807123(2) 动态多态:就是通过继承重写基类的虚函数实现的多态,因为是在运行时决议确定,所以称为动态多态。本篇文章主讲动态多态原创 2017-06-14 21:15:24 · 343 阅读 · 0 评论 -
用C语言模拟实现c++的继承与多态特性
一、我们知道,C语言是一种面向过程的编程语言,而C++是一款在它的语法基础上改进的面向对象的编程语言 (1)面向过程与面向对象的区别: ①从设计方法角度看: ▶面向过程程序设计方法是用函数(即算法过程)对数据进行操作,但又将函数与其操作的数据分离开来。 ▶面向对象程序设计方法是将对象的属性数据和对属性数据的操作封装在一起,作为一个整体来处理。 ②从维护角度看: ▶面向过程程原创 2017-04-17 23:37:03 · 603 阅读 · 0 评论 -
STL学习&&数据结构
1.STL学习: http://study.163.com/course/courseLearn.htm?courseId=1003205055#/learn/video?lessonId=1003642022&courseId=10032050552.数据结构和算法 数据结构和算法3.IT经典面试题剖析 C C++部分:IT经典面试题剖析 C C++部分4.面向对象程序设计-C++ 面向对象原创 2017-08-07 13:54:14 · 397 阅读 · 0 评论 -
vector 中resize和reserve的区别
vector 中resize和reserve的区别#include<iostream>using namespace std;#include<vector>int main(){ vector<int> a; a.reserve(10); //分配10int大小的容量,没有初始化,不能访问 * * * * * * * * * * //初始化5个空间大小转载 2017-08-07 21:09:29 · 312 阅读 · 0 评论 -
定义一个只能在堆上生成对象的类&&定义一个只能在栈上生成对象的类&&定义一个类不能被继承
1.定义一个类不能被继承子类在继承父类的成员函数和成员变量之后,在子类的构造函数之前会先调用父类的构造函数,先初始化父类的成员变量,然后在子类的构造函数中初始化子类的成员变量; 所以一个类不能被继承,表示其子类在实例化对象时不成功,即不能调用父类的构造函数;那么将父类的构造函数的访问属性设置成为私有,这样一来,不论采用任何继承关系,父类的私有成员在子类中都不可见;即父类的构造函数在子类的构造函数之原创 2017-07-07 15:35:52 · 506 阅读 · 0 评论 -
智能指针详解
一、RALL机制RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。 他的思想是资源分配即初始化,定义一个类来封装资源的的分配和释放,在构造函数完成资源的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确释放和初始化RAII要求,资源的有效期与持有资源的对象的⽣命期严原创 2017-08-20 05:48:36 · 1048 阅读 · 0 评论 -
c++小知识点--this指针与const
转载: http://www.cnblogs.com/little-sjq/p/9fed5450f45316cf35f4b1c17f2f6361.html转载 2017-09-14 10:30:32 · 390 阅读 · 0 评论 -
继承(二)--菱形继承,虚拟虚拟继承
前言:在上一篇文章继承(一)当中,我们都是讨论单继承的情况; 即一个子类只有一个直接父类时称这个继承关系为单继承单继承的模型是继承里面最简单的: 这篇文章,我主要讨论多继承的情况;一、多继承的概念:一个子类有两个或者两个以上直接父类时,这种继承关系成为多继承; 二、在多继承的继承关系中,最典型的就是菱形继承(也叫钻石继承) 本篇文章主讲多继承中的菱形继承;(1)菱形继承的继承关系 (2)原创 2017-06-02 12:17:24 · 326 阅读 · 0 评论 -
继承(三)--友元与继承&&静态成员与继承
前言:对前面继承(一)文章与继承(二)文章的补充; 一、友元与继承1.友元分为友元函数和友元类;2.在类的继承关系中,友元关系不能继承;也就是说,父类的友元函数和友元类,不能通过继承以后访问子类的成员;(即:父亲的朋友不是儿子的朋友)如果真的需要父类的友元函数或者友元类访问子类的成员;那么可以在子类中,将该父类的友元函数或者友元类声明为自己的友元;这样就可以让父类的友元访问子类的成员;代码说明:#原创 2017-06-02 20:55:23 · 715 阅读 · 0 评论 -
理解 assert()断言
头文件:assert.hassert即断言,也即做出一些假设,程序运行时如果假设不成立,程序就会中断。没有很多调试经验,可能不太理解断言在哪会用到,实际上我们在调试一个出错的程序时,由于程序出错的位置往往不是错误起因的位置,我们需要追溯错误的起源,就需要在前方的一定位置确保某个变量的值符合一定的条件。 比如VS有局部数组变量越界访问检查机制,如果函数中的数组被越界访问,在函数结束时会报错,但是原创 2016-11-30 21:30:07 · 2788 阅读 · 1 评论 -
在c++程序中调用被C编译器编译后的函数,为什么要使用extern “C”
c/c++函数调用约定:c/c++函数调用约定 一、原题: 二、详细说明: 现在,在一个工程中;有一个test.c文件;一个test1.cpp文件;//test.c#include<stdio.h>int Add(int a,int b){ return a+b;}(1)使用extern int Add(int,int);声明外部函数—–错误 //test1.cpp#inc原创 2017-05-04 22:13:32 · 8027 阅读 · 0 评论 -
string类的简单实现(深拷贝,浅拷贝)
一、前言▶在c语言中我们来描述一个字符串是用const char* p=”abcdef”;然后我们也学习了许多关于字符串的操作函数。 ▶那么,在学习了面向对象的c++语言之后,我们可以定义一个字符(string),这个类可以定义一个字符串对象;并且可以对该对象内存储的字符串进行各种操作; ▶接下来,我们模拟实现一个简单的string类;只需要实现★构造,★拷贝构造和★赋值运算符重载★析构原创 2017-04-23 20:44:54 · 6439 阅读 · 0 评论 -
简单的string类的模拟实现
综述:c++标准库提供了一个字符串类型string ,该类型可以直接定义一个字符串对象,并且对字符串进行各种操作;以下是本人根据c++标准库中的string类,简单的模拟实现该类; 先看cpulspuls中string类的成员函数: 其中我只实现图中列出函数原型的几个成员函数: (1)实现之前先看看这写函数及其重载函数是什么意思: 测试代码原创 2017-05-25 13:18:50 · 541 阅读 · 0 评论 -
c++模拟实现顺序表
一、用面向对象的思想模拟实现动态顺序表; 写一个顺序表类;该顺序表类的成员变量为:_sz记录顺序表实际储存的元素个数;_capacity记录顺序表的实际存储容量;_data为一个动态数组;储存元素; 二、该顺序表类的成员函数有 (1)类的默认成员数;SeqList()//构造SeqList(const SeqList& seqlist)//拷贝构造SeqList& operator=(Se原创 2017-05-26 21:40:19 · 422 阅读 · 0 评论 -
复数类
复数类:(1)由于默认的拷贝构造函数以值拷贝的方式一个一个拷贝的,此处的复数类,用值拷贝不会出错,所以不写,直接用默认的成员函数; (2)赋值运算符重载也是用默认的成员函数; (3)注意使用传引用能使程序效率增强;在函数的形参处使用const 引用的方式,保护外来的对象不被修改; (4)注意传引用返回和传值返回;当函数要返回的 变量为函数内的临时变量时,这时用传值返回; 当函数要返回的变量不原创 2017-05-09 01:55:32 · 604 阅读 · 0 评论 -
初始化列表
一:为什么使用初始化列表比较高效?答:因为在初始化列表中对成员变量初始化,是直接调用成员变量的拷贝构造函数对其初始化; 而在构造函数体内对成员变量初始化;是先在进入函数之前调用成员变量自身的默认构造函数,创建一个真正成员变量对象,然后在函数体内调用成员变量对象的赋值运算符重载函数,给对象赋值;代码:#include<iostream>using namespace std;class Time原创 2017-05-09 16:44:48 · 226 阅读 · 0 评论 -
c++实现单链表
一、用面向对象的思想,用c++语言实现单链表类(1)链表结点的定义typedef int DataType;struct ListNode{ ListNode(const DataType& x) :data(x) ,next(NULL) {} DataType data; ListNode* next;};(2)链表的成员变量原创 2017-05-28 13:36:06 · 1224 阅读 · 0 评论 -
c++函数重载机制实现原理
一、c++函数重载的定义:在同一作用域类,一组函数的函数名相同,参数列表不同(参数个数不同/参数类型不同),返回值可同可不同二、函数重载的作用:重载函数通常用来在同一个作用域内命名一组功能相似的函数,这样做减少了函数名的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。三、函数重载是一种静态多态:(1)多态:用同一个东西表示不同的形态; (2)多态分为: 静态多态(编译时的多态) 动态原创 2017-05-30 00:48:58 · 9791 阅读 · 5 评论 -
探索c++对象模型
一、探索虚函数表虚函数表是通过一块连续内存来存储虚函数的地址。这张表解决了继承、虚函数(重写)的问题。在含有虚函数的类的对象实例中都存在一张虚函数表,编译器都会维护这张虚表,对象的前四个字节就是指向虚表的指针,虚函数表就像一张地图,指明了实际应该调用的虚函数。虚表是所有类对象实例共用的(1)在不含虚函数的类的对象实例中一定不含虚函数表指针#include<iostream>using namesp原创 2017-06-15 17:13:24 · 514 阅读 · 0 评论 -
对用父类指针(或引用)指向父类对象和子类对象时,从而用父类指针或者引用访问成员时的深刻理解;
赋值兼容规则永远不变,父类指针既可以指向父类对象,也可以指向子类对象;当父类指针指向父类对象时,访问父类的成员;当父类指针指向子类对象时,那么只能访问子类中从父类继承下来的那部分成员;不能访问子类独有的成员,如果访问,编译阶段会报错;函数隐藏(将父类的成员隐藏,通过子类对象或者在子类内部只能访问子类的同名成员;但是父类的成员仍然存在),是指当子类中有和父类同名的成员变量时,此时子类中有两个名字相同的原创 2017-06-17 14:40:33 · 7275 阅读 · 1 评论 -
string类的简单实现(写时拷贝Copy-on-write)
前言:上一篇文章实现了string的深拷贝写法;那我们能不能用浅拷贝写string类呢?当然可以; 一、 (1) 当我们需要对拷贝之后的对象进行修改时,采用深拷贝的方式; 如果不需要修改,只是输出字符串的内容时,或者是当偶尔修改的的时候,我们再采用深拷贝的方法;对于这两种情况,我们在实现拷贝构造函数时采用浅拷贝的方式。在采用浅拷贝的方式以后,那么两个对象的成员变量指针指向同一块字符串空间;根据原创 2017-04-23 22:26:52 · 1247 阅读 · 3 评论 -
线程基本概念和线程控制
一、线程的基本概念:线程也被称为轻量进程,线程是运行中的程序的最小调度单位。 线程是进程中的实体,一个进程可以拥有多个线程,一个线程必须有一个父进程。二、linux下线程的特点线程不拥有系统资源,只能运行必须的一些数据结构;它与父进程的其它线程共享该进程所拥有的资源。线程可以创建和撤消,从而实现程序的并发执行。一般,线程具有就绪、阻塞和运行三种基本状态。 在多中央处理器的系统里,不同线程可原创 2017-06-18 14:14:18 · 493 阅读 · 0 评论 -
日期计算器
一、完成功能1.日期+/-天数=返回日期 2.日期-日期=返回天数 3.打印某年某月的本月日历; 二、功能分析见图: 三、源代码//完成功能//1.日期+/-天数=返回日期//2.日期-日期=返回天数//3.打印某年某月的本月日历;#include<iostream>using namespace std;class Date{friend ostream& operator原创 2017-05-15 12:21:45 · 5077 阅读 · 0 评论