自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

To Be Continue

坚持初心!努力可以不被别人所见,但一定要让自己知道!

  • 博客(43)
  • 资源 (2)
  • 收藏
  • 关注

原创 C++(41)虚继承

为什么要用虚继承如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类-中声明的名字进行访问时,可能产生二义性 如果在多条继承路径上有一个公共的基类,那么在继承路径的某处汇合点,这个公共基类就会在派生类的对象中产生多个基类子对象 要使这个公共基类在派生类中只产生一个子对象,必须对这个基类声明为虚继承,使这个基类成为虚基类。 虚继承声明使用关键字 v

2018-01-27 19:54:51 166

原创 C++(40)多继承的二义性

概念:如果一个派生类从多个基类派生,而这些基类又有一个共同的基类,则在对该基类中声明的名字进行访问时,可能产生二义性示例#include<iostream>using namespace std;class Parent{public: Parent(int a) { this->a = a; cout<<"Parent 构造函数被调用"<<e

2018-01-27 19:01:04 269

原创 C++(39)多继承

概念一个类有多个直接基类的继承关系称为多继承 多继承声明语法 class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n { 数据成员和成员函数声明 }; 类 C 可以根据访问控制同时继承类 A 和类 B 的成员,并添加自己的成员多继承的派生类的构造和访问多个基类的派生类构造函数可以用初始式调用基类构造函数初始化数据

2018-01-27 00:39:01 160

原创 c++(38)派生类中的static关键字

继承和static关键字在一起会产生什么现象哪? 理论知识基类定义的静态成员,将被所有派生类共享 根据静态成员自身的访问特性和派生类的继承方式,在类层次体系中具有不同的访问性质(遵守派生类的访问控制) 派生类中访问静态成员,用以下形式显式说明: 类名 :: 成员 或通过对象访问 对象名 . 成员 总结:static函数也遵守3个访问原则 static易犯错误(不

2018-01-27 00:30:15 301

原创 C++(37)继承中的同名函数

继承中的同名函数重载:必须在同一个类中进行子类无法重载父类的函数,父类同名函数将被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用重定义:必须发生于父类与子类之间并且父类与子类中的函数必须有完全相同的原型(如果用virtual关键字修饰,那叫重写)示例程序:#include <iostream>using namespace std;// 关于继承中的重载问题// 重载只能发生在一个类之中,

2018-01-26 22:22:28 1440

原创 C++(36)继承中的同名成员

原则:当子类成员变量与父类成员变量同名时 子类依然从父类继承同名成员 在子类中通过作用域分辨符::进行同名成员区分(在派生类中使用基类的同名成员,显式地使用类名限定符) 同名成员存储在内存中的不同位置#include <iostream>using namespace std;class Parent{public: int a; int b;};class Chi

2018-01-26 21:56:19 196

原创 C++(35)继承与组合混搭情况下,构造析构的调用原则

继承与组合混搭情况下,构造析构的调用原则先构造父类,再构造成员变量、最后构造自己 先析构自己,在析构成员变量、最后析构父类 先构造的对象,后释放示例#include <iostream>using namespace std;// 对象类class Object{public: Object(int m1, int m2) { this->m1

2018-01-26 21:35:43 175

原创 C++(34)继承中的构造和析构

继承中的构造析构调用原则问题:如何初始化父类成员?父类与子类的构造函数有什么关系在子类对象构造时,需要调用父类构造函数对其继承得来的成员进行初始化在子类对象析构时,需要调用父类析构函数对其继承得来的成员进行清理子类对象在创建时会首先调用父类的构造函数 父类构造函数执行结束后,执行子类的构造函数 当父类的构造函数有参数时,需要在子类的初始化列表中显示调用 析构函数调用的先后顺序与构造函数

2018-01-26 21:18:39 167

原创 *C++(33)类型兼容性原则

类型兼容性原则类型兼容规则是指在需要基类对象的任何地方,都可以使用公有派生类的对象来替代。通过公有继承,派生类得到了基类中除构造函数、析构函数之外的所有成员。这样,公有派生类实际就具备了基类的所有功能,凡是基类能解决的问题,公有派生类都可以解决。类型兼容规则中所指的替代包括以下情况:子类对象可以当作父类对象使用 子类对象可以直接赋值给父类对象 子类对象可以直接初始化父类对象 父类指针可以

2018-01-26 20:58:57 351

原创 C++(32)继承的访问权限

单个类的访问权限public 修饰的成员变量 方法 在类的内部 类的外部都能使用 protected: 修饰的成员变量方法,在类的内部使用 ,在继承的子类中可用 ;其他 类的外部不能被使用 private: 修饰的成员变量方法 只能在类的内部使用 不能在类的外部继承权限不同的继承方式会影响基类成员在派生类中的访问权限。1) public继承方式基类中所有 public 成员在派生类中为 p

2018-01-26 19:36:33 257

原创 C++(31)继承的概念

一、类之间的关系(1)has:包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系用类成员表示,即一个类中的数据成员是另一种已经定义的类 (2)use:一个类部分地使用另一个类。通过类之间成员函数的相互联系,定义友员或对象参数传递实现。 (3)is:机制称为“继承”。关系具有传递性,不具有对称性二、继承关系继承是类与类之间的关系,是一个很简单很直观的概念,与现实世界中的继承类似,例如

2018-01-26 15:34:15 239

原创 C++(30)数组下标的运算符重载

重载[]和()运算符运算符 [] 和 () 是二元运算符 [] 和 () 只能用成员函数重载,不能用友元函数重载 重载下标运算符 [] []运算符用于访问数据对象的元素 重载格式类型 类 :: operator[] ( 类型 )设 x 是类 X 的一个对象,则表达式 x [ y ] 可被解释为 x . operator [ ] ( y ) #include <i

2018-01-19 21:27:20 936

原创 C++(29)逻辑运算符

逻辑运算符1)&&和||是C++中非常特殊的操作符 2)&&和||内置实现了短路规则 3)操作符重载是靠函数重载来完成的 4)操作数作为函数参数传递 5)C++的函数参数都会被求值,无法实现短路规则 #include <iostream>using namespace std;class Test8_1{ friend ostream &operator<< (ostrea

2018-01-19 21:05:50 322

原创 C++(28)函数调用运算符

函数调用运算符() 运算符用于函数调用 重载格式 类型 类 :: operator() ( 表达式表 ) ; #include <iostream>using namespace std;class Test{public: Test(int a) { this->a = a; } void operator()(int b1, i

2018-01-19 20:44:09 451

原创 C++(27)赋值运算符

赋值运算符赋值运算符重载用于对象数据的复制 operator= 必须重载为成员函数 重载函数原型为: 类型 & 类名 :: operator= ( const 类名 & ) ; #include <iostream>#include <string.h>using namespace std;class Student{ friend ostream &ope

2018-01-19 20:31:30 277

原创 C++(26)左移操作符和右移操作符

友元函数和成员函数选择的方法当无法修改左操作数的类时,使用全局函数进行重载=, [], ()和->操作符只能通过成员函数进行重载 重载左移操作符#include <iostream>using namespace std;class Complex{ friend void operator<< (ostream &out, const Complex &c);public:

2018-01-19 19:42:54 754

原创 C++(25)单目运算

#include <iostream>using namespace std;// 2 + 3i 实部 虚部class Complex{ friend Complex& operator++(Complex &c); friend Complex operator++(Complex &c, int);public: Complex() {

2018-01-13 21:36:03 550

原创 C++(24)运算符重载

概念所谓重载,就是重新赋予新的含义。函数重载就是对一个已有的函数赋予新的含义,使之实现新功能,因此,一个函数名就可以用来代表不同功能的函数,也就是”一名多用”。运算符也可以重载。实际上,我们已经在不知不觉之中使用了运算符重载。例如,大 家都已习惯于用加法运算符”+”对整数、单精度数和双精度数进行加法运算,如5+8, 5.8 +3.67等,其实计算机对整数、单精度数和双精度数的加法操作过程是很不相同的

2018-01-13 19:29:39 371

原创 C++(23)友元

友元函数友元函数不是类的内部函数,是一个全局函数,但是可以改变类的私有属性 友元函破坏了类的封装性 友元函数没有this指针,因为它是全局函数不在类内部,只是要在类的内部声明。友元类若B类是A类的友员类,则B类的所有成员函数都是A类的友员函数 友员类通常设计为一种对数据操作或类之间传递消息的辅助类 #include <iostream>using namespace std;class Add

2018-01-13 15:20:29 427

原创 C++(22)对象模型

总结1、C++类对象中的成员变量和成员函数是分开存储的。C语言中的内存四区模型仍然有效 2、C++中类的普通成员函数都隐式包含一个指向当前对象的this指针。 3、静态成员函数、成员变量属于类 静态成员函数与普通成员函数的区别: 静态成员函数不包含指向具体对象的指针 普通成员函数包含一个指向具体对象的指针#include <iostream>using namespace std;clas

2018-01-13 02:24:00 242

原创 C++(21)类中的静态成员

静态成员变量关键字 static 可以用于说明一个类的成员, 静态成员提供了一个同类对象的共享机制 把一个类的成员说明为 static 时,这个类无论有多少个对象被创建,这些对象共享这个 static 成员 静态成员局部于类,它不是对象成员,在类的外部进行初始化静态成员函数静态成员函数数冠以关键字static 静态成员函数提供不依赖于类数据结构的共同操作,它没有this指针 在

2018-01-13 01:55:42 174

原创 C++(20)类对象的动态建立和释放

new和delete的用法1)在软件开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。 注意: new和delete是运算符,不是函数,因此执行效率高。2)虽然为了与C语言兼容,C++仍保留malloc和free

2018-01-13 01:33:05 2776

原创 C++(19)构造函数中调用构造函数

#include <iostream>using namespace std;class Test4_1{public: // 构造函数中不要调用其他构造函数,无法完成初始化操作 Test4_1(int a) { m_a = a; Test4_1(1, 2); // 匿名对象:新的对象 } Test4_1(int b, i

2018-01-12 22:58:47 160

原创 C++(18)对象初始化列表

1)对象初始化列表出现原因1.必须这样做: 如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数, 如果没有初始化列表,那么他将无法完成第一步,就会报错。2、类成员中若有const修饰,必须在对象初始化的时候,给const int m 赋值 当类成员中含有一个

2018-01-12 20:53:06 348

原创 C++(17)拷贝

浅拷贝问题分析默认复制构造函数可以完成对象的数据成员值简单的复制 对象的数据资源是由指针指示的堆时,默认复制构造函数仅作指针值复制解决方法:深拷贝#include #include using namespace std;class Teacher{public: Teacher(int a, char *name) { m_ag

2018-01-12 19:49:07 280

原创 C++(16)对象的构造和析构

构造函数定义 1)C++中的类可以定义与类名相同的特殊成员函数,这种与类名相同的成员函数叫做构造函数; 2)构造函数在定义时可以有参数; 3)没有任何返回类型的声明。 调用 自动调用:一般情况下C++编译器会自动调用构造函数 手动调用:在一些情况下则需要手工调用构造函数析构函数定义 1)C++中的类可以定义一个特殊的成员函数清理对象,这个特殊的成员函数叫做析构函数 语法:~Cl

2018-01-11 09:09:59 219

原创 C++(15)类

封装A)封装,是面向对象程序设计最基本的特性。把数据(属性)和函数(操作)合成一个整体,这在计算机世界中是用类与对象实现的。 B)封装,把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。 备注:有2层含义(把属性和方法进行封装 对属性和方法进行访问控制) C++中类的封装 成员变量,C++中用于表示类属性的变量

2018-01-10 22:06:51 324

原创 C++(14)函数重载

概念用同一个函数名定义不同的函数 当函数名和不同的参数搭配时函数的含义不同 函数重载判断标准函数重载至少满足下面的一个条件: 参数个数不同 参数类型不同 参数顺序不同 函数返回值不是函数重载的判断标准#include<iostream>#include <string.h>using namespace std;void func(int a){

2018-01-10 20:19:52 374

原创 C++(13)占位参数

占位参数占位参数只有参数类型声明,而没有参数名声明 一般情况下,在函数体内部无法使用占位参数int func(int a,int b,int){ return a+b;}int main(){ //func(1,2); //error C2660: “func”: 函数不接受 2 个参数 cout<<func(1,2,3)<<endl; return 0;

2018-01-10 17:13:27 336

原创 C++(12)默认参数

默认参数C++中可以在函数声明时为参数提供一个默认值, 当函数调用时没有指定这个参数的值,编译器会自动用默认值代替默认参数的规则只有参数列表后面部分的参数才可以提供默认参数值 一旦在一个函数调用中开始使用默认参数值,那么这个参数后的所有参数都必须使用默#include<iostream>using namespace std;int add(int a,int b = 0,int c =0)

2018-01-10 16:41:23 163

原创 C++(11)内联函数

内联函数#include <iostream>using namespace std;// 宏 define 1、定义宏常量 2、定义宏函数#define A 10const int a = 10;// 宏函数,没有函数的入栈和出栈的开销#define MAX(a,b) (((a) > (b)) ? (a):(b))#define ADD(a, b) ((a) + (b)) int

2018-01-10 16:29:43 533

原创 C++(10)常引用

常引用#include <stdio.h>int main(){ int a = 10; int &b = a; // 普通引用 int x = 20; const int& y = x; // 常引用 让变量y拥有只读属性,不能通过y改变x的值 // 常引用 初始化 分为 2中情况 // 1、用变量初始化 常引用 {

2018-01-10 16:05:10 238

原创 C++(9)普通引用

变量名变量名实质上是一段连续存储空间的别名,是一个标号(门牌号) 程序中通过变量来申请并命名内存空间 通过变量的名字可以使用存储空间引用引用可以看作一个已定义变量的别名 引用的语法:Type& name = var; include <stdio.h>int main(){ // 定义一个int型变量a,在内存中占4个字节, // 变量名 a 就代表了这一块内存,或者说

2018-01-10 15:36:09 244

原创 C语言(插入排序)

直接插入排序: 对于给定的一组记录,初始时假定第一个记录自成一个有序的序列,其余的记录为无序序列;接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直至最后一个记录插入到有序序列为止。#include <stdio.h>void Insert(int a[],int len){ int i,j,temp; for(i = 1;i <

2018-01-06 20:05:32 466

原创 C语言(冒泡排序)

#include <stdio.h>void Bubble(int a[],int len){ int i,j,temp; for(i = 0;i < len - 1;i++) { for(j = len - 1;j > i;j--) if (a[j] < a[j - 1]) {

2018-01-06 18:52:35 14279

原创 C++(8)const

C语言中的const#include <stdio.h>int main(){ // C语言中 const修饰的变量是一个 常变量,本质还是变量,有自己的地址空间 const int a = 10; int *p = (int *)&a; *p = 5; printf("a = %d,*p = %d\n",a,*p); printf("&a = %p,

2018-01-06 16:59:05 239

原创 C++(7)三目运算符

1 C语言中表达式的结果 放在什么地方? ==> 寄存器 表达式返回的是一个值,是一个数 在C++中,表达式返回的是变量本身2 如何做到的 让表达式返回一个内存空间..内存的首地址 指针 在C语言中如何实现C++的效果3 本质 C++编译器自己做了取地址的操作int main(){ int a = 10; int b = 20; // C++中三目运算符返回的

2018-01-06 16:10:03 555

原创 C++(6)bool类型

C++中的布尔类型 C++在C语言的基本类型系统之上增加了bool C++中的bool可取的值只有true和false 理论上bool只占用一个字节, 如果多个bool变量定义在一起,可能会各占一个bit,这取决于编译器的实现 true代表真值,编译器内部用1来表示 false代表非真值,编译器内部用0来表示 bool类型只有true(

2018-01-06 15:52:59 401

原创 C++(5)结构体加强

C语言的struct定义了一组变量的集合,C编译器并不认为这是一种新的类型C++中的struct是一个新类型的定义声明#include <stdio.h>struct Student{ char name[20]; int age;};int main(){ // C语言中 struct 定义了一组数据的集合,而不是一种新的数据类型 // 所以在定义变量的时

2018-01-06 15:29:54 466

原创 C++(4)寄存器变量

register关键字请求“编译器”将局部变量存储于寄存器中 C语言中无法取得register变量地址在C++中依然支持register关键字 1、C++编译器有自己的优化方式,不使用register也可能做优化 2、C++中可以取得register变量的地址 C++编译器发现程序中需要取re

2018-01-06 14:00:09 1970

Qt之QComboBox下拉界面带勾选

基于QCombBox实现下拉框可勾选多个,初始的QComboBox只能选择一个,需要资源可私信。

2020-12-03

DSLineEdit.zip

输入一个字符时明文显示,过两秒该字符密文显示。如果持续输入,所有字符,出最后一位之外全部密文显示,最后一位两秒之后,再密文显示。

2020-08-04

空空如也

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

TA关注的人

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