自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 覆盖、保护成员、派生类的构造函数、public继承的赋值兼容规则、直接基类与间接基类

覆盖、保护成员、派生类的构造函数覆盖派生类可以定义一个和基类成员同名的成员,这就叫覆盖。在派生类中访问这类成员时,缺省的情况是访问派生类中定义的成员。要在派生类中访问由基类定义的同名成员时,要使用作用域符号::。//基类和派生类有同名成员的情况:class base{ int j;public: int i; void func();};class derived:public base{public: int i; void access();

2021-08-26 10:35:48 367

原创 继承和派生

继承和派生继承:在定义一个新的类B时,如果该类与某个已有的类A相似(指的是B拥有A的全部特点),那么就可以把A作为一个基类,而把B作为一个基类的派生类(也称为子类)。派生类是通过对基类进行修改和扩充得到的。在派生类中,可以扩充新的成员变量和成员函数。派生类一经定义后,可以独立使用,不依赖于基类。派生类拥有基类的全部成员变量和成员函数,不论是practice、protected、public。派生类的各个成员函数中,不能访问基类的private成员。派生类的写法:class 派生类名:publi

2021-08-21 19:40:03 172

原创 流插入运算符与流提取运算符重载,类型转换运算符的重载,自增、自减运算符的重载

流插入运算符与流提取运算符,类型转换运算符的重载,自增、自减运算符的重载流插入运算符的重载cout是在iostream头文件中定义的,ostream类的对象。“<<”可以用在cout上使用是因为在iostream中对“<<”进行了重载。/*如果下面程序输出为5hello,该如何补写class CStudent{public: int nAge;};int main(){ CStudent s; s.nAge = 5; cout

2021-08-20 21:19:46 448

原创 可变长数组类的实现

可变长数组类的实现class CArray{ int size; //数组元素的个数 int *ptr; //指向动态分配的数组public: CArray(int s = 0); //s代表数组元素的个数 CArray(CArray &a); ~CArray(); void push_back(int v); //用于数组尾部添加一个元素v CArray &operator=(const CArray &a)

2021-07-23 17:59:59 245

原创 浅拷贝与深拷贝

浅拷贝与深拷贝class String {private: char *str;public: String():str(new char[1]) { str[0] = 0; } const char *c_str() { return str; } String &operator=(const char *s) { delete []str; str =

2021-07-23 14:28:55 95

原创 运算符重载

运算符重载运算符重载就是对已有的运算符(c++中预定义的运算符)赋予多重的含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。运算符重载的实质就是函数重载。可以重载为普通函数,也可以重载为成员函数。把含运算符的表达式转换为对运算符函数的调用。把运算符的操作数转换成运算符函数的参数。运算符被多次重载时,根据实参的类型决定调用哪个运算符函数。运算符重载的形式/*返回值类型 operator运算符(形参表){ ....}*///运算符重载实例class Complex

2021-07-23 10:14:56 149

原创 友元的简单介绍

友元友元分为友元函数和友元类两种。友元函数一个类的友元函数可以访问该类的私有成员。class CCar; //提前声明CCar类,以便后面的CDriver类使用class CDriver{public: void ModifyCar(CCar *pCar); //改装汽车};class CCar{ friend int MostExpensiveCar(CCar cars[], int total); //友元声明 feiend void CDriver:

2021-07-22 19:34:25 542

原创 常量对象、常量成员函数和常引用

常量对象、常量成员函数和常引用常量对象如果不希望某个对象的值被改变,则定义该对象的时候可以在前面加const关键字。class CEngine //引擎类{};const CEngine obj; //常量对象常量成员函数1、在类成员函数说明后面可以加上const关键字,则该成员函数成为常量成员函数。2、常量成员函数执行期间不应该修改其所作用的对象。因此,在常量成员函数中不能修改成员函数的值(静态成员变量除外),也不能调用同类的非常量成员函数(静态成员函数除外)。class Sa

2021-07-22 17:00:52 184

原创 成员对象和封闭类

成员对象和封闭类有成员对象的类叫封闭类class CTyre //轮胎类{private: int radius; //半径 int width; //宽度public: CTyre(int r, int w):radius(r), width(w) {}};class CEngine //引擎类{};class CCar //汽车类,封闭类{private: int price; //价格 CTyre ty

2021-07-22 15:43:55 101

原创 静态成员变量和静态成员函数

静态成员变量和静态成员函数静态成员:在定义前加了static关键字的成员。class CRectangle{private: int w, h; static int nTotalArea; //静态成员变量 static int nTotalNumble;public: CRectangle(int w_, int h_); ~CRectangle(); static void PrintTotal(); //静态成员函数};//普通成

2021-07-22 11:42:29 102

原创 this指针

this指针c++程序到c程序的翻译//c++程序:class CCar{public: int price; void SetPrice(int p);};void CCar::SetPrice(int p){ price = p;}int main(){ CCar car; car.SetPrice(20000); return 0;}/*------------------------------*///转换成c程序:

2021-07-22 10:07:31 92

原创 类和对象的基本概念

类和对象的基本概念类和对象从客观事物抽象出类。举例理解类:写一个程序,输入矩形的长和宽,输出面积和周长。//面向过程的方法:#include <iostream>using namespace std;int main(){ double length, width; double area = 0, perimeter = 0; cout << "请输入矩形的长:" << endl; cin >> leng

2021-07-21 16:46:27 266

原创 内联函数、函数重载、函数缺省参数

内联函数、函数重载、函数缺省参数内联函数(减少函数调用的开销)编译器处理对内联函数的调用语句时,是将整个函数的代码插入到调用语句处,而不会产生调用函数的语句。(适用于简单的函数)定义内联函数:在函数定义前面加上“inline”关键字,即可定义内联函数inline int Max(int a, int b){ if(a < b) return a; return b;}函数重载函数重载:一个或者多个函数,名字相同,然而参数个数或者参数类型不同。int

2021-07-21 13:51:15 105

原创 动态内存分配

动态内存分配用new运算符实现动态内存分配第一种用法,分配一个变量/*P = new T;T是任意类型名,P是类型为T*的指针。动态分配出一片大小为sizeof(T)字节的内存空间,并且将该内存空间的起始地址赋值给P。*/int *pn;pn = new int; //new int的返回值类型是int **pn = 5;第二种用法,分配一个数组/*P = new T[N];T为任意类型名;P为类型为T*的指针;N为要分配的数组元素的个数,可以是整型表达式。动态分配出一片

2021-07-21 13:47:12 167

原创 const关键字

const关键字1、定义常量const int MAX_VAL = 23;const double PI = 3.14;const char *SCHOOL_NAME = "Nanchang University";2、定义常量指针不可以通过常量指针修改其指向的内容int n, m;const int *p = &n;*p = 5; //编译出错n = 4; //正确p = &m; //正确,常量指针的指向可以变化不能把常量指针赋值给非常量指针,反过

2021-07-21 13:34:15 69

原创 数据结构学习记录(六)------树

前言树:有且只有一个称为根的节点,有若干个互不相交的子树,这些子树本身也是一颗树。通俗理解:树由节点与边组成,每一个节点只有一个父节点,但可以有多个子节点,但有一个节点例外,该节点没有父节点,此节点为根节点。专业术语:1、深度:从根节点到最底层节点的层数叫深度,根节点是第一层。2、叶子节点:没有子节点的节点。3、非终端节点:实际就是非叶子节点。4、度:子节点的个数。树的分类树可以分为一般树、二叉树、森林。一般树:任意一个节点的子节点的个数都不受限制。森林:n个互不相交的树的集合。二

2021-05-04 17:22:09 159

原创 数据结构学习记录(五)------递归举例

前言递归:一个函数直接或者间接调用自己。本文主要介绍递归的几个简单举例。递归满足的条件1、递归必须得有一个明确的终止条件;2、该函数所处理的数据规模必须是递减的;3、这个转化必须是可解的。循环与递归的比较所有循环都可以由递归实现,而所有递归不一定都可由循环实现。比较内容优点缺点递归容易理解速度慢、存储空间大循环速度快、存储空间小不易理解求阶乘用循环实现#include <stdio.h>int main(void){

2021-05-03 10:47:17 1582 1

原创 数据结构学习记录(四)------循环队列

前言队列是一种实现“先进先出”的存储结构,可以分为链式队列和静态队列(静态队列通常都是循环队列)。本文主要叙述循环队列的一些基础知识和代码实现。循环队列的参数以及各个参数的含义1、确定循环队列需要的参数确定一个循环队列需要两个参数:front、rear2、各个参数的含义   a、队列初始化:front和rear的值都是0;   b、队列非空:front代表循环队列的第一个元素,rear代表循环队列的最后一个有效元素的下一个元素;   c、队列为空:front和rear的值相等,但不一定是0

2021-04-30 13:50:23 173

原创 数据结构学习记录(三)------动态栈

前言栈是一种实现“先进后出”的存储结构。本文主要介绍对动态栈的初始化、压栈、遍历、出栈、清空。对动态栈的操作初始化初始化伪算法初始化代码void init(PSTACK pS){ pS->pTop = (PNODE)malloc(NODE); //创建一块动态内存,让pS->pTop指向它 上图1 { if(NULL == pS->pTop) //判断内存是否分配成功 { printf("内存分配

2021-04-28 16:09:47 116

原创 数据结构学习记录(二)------链表

前言本篇文章是在上一篇文章link.的基础上对非循环单链表的其他操作(判断链表是否为空、求链表的长度、对链表排序以及对链表的插入和删除操作)判断链表是否为空代码实现:bool is_empty(PNODE pHead){ PNODE p = pHead->pNext; if(NULL == p) return true; else return false;}求链表的长度代码实现:int length_list(PNODE p

2021-04-27 21:07:19 120

原创 数据结构学习记录(一)

创建一个非循环单链表并遍历创建一个非循环单链表创建非循环单链表伪算法演示首先创建一个不存放有效数据的头结点,然后利用一个for循环在头结点后面创建结点。具体代码实现//创建一个链表PNODE create_List(void){ int len; //用来存放有效节点的个数 int i; int val; //用来临时存放用户输入的结点的值 //分配了一个不存放有效数据的头结点 PNODE pHead = (PNODE)malloc(sizeof

2021-04-26 18:54:33 198

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除