C++
ʚVVcatɞ
时光难留,只有一去不返。
展开
-
使用QT制作桌面小工具(一)
制作目标:实现一个桌面工具制作内容:1.显示图片2.为窗口添加 ico 图标3.隐藏窗口边窗4.窗口置顶5.实现拖拽操作开发环境QT:5.14.1 MSVC2017 64bit代码部分:在程序窗口中显示一张图片QPainter绘图重写绘图事件,虚函数如果窗口绘图,必须放在绘图事件里实现绘图事件内部自动调用,窗口需要重绘的时候,状态改变绘图设备(QPixmap,QImage,QBitmap,QPicture)QPixmap图片背景透明,针对屏幕进行优化了,原创 2021-10-17 01:47:04 · 2097 阅读 · 1 评论 -
C++ 使用dynamic_cast执行基类向派生类的转换
dynamic_cast是与static_cast,const_cast,reinterpret_cast并列的4种类型转换操作之一。它可以将基类的指针显示转换为派生类的指针,或将基类的引用显示转换为派生类的引用。但与static_cast不同的是,它执行的不是无条件的转换,它在转换前会检查指针(或引用)所指向对象的实际类型是否与转换的目的类型兼容,如果兼容转换才会发生,才能得到派生类的指针(或引用),否则:如果执行的是指针类型的转换,会得到空指针。如果执行的是引用类型的转换,会抛出异常。#inc原创 2021-01-08 21:56:18 · 1660 阅读 · 0 评论 -
C++ 虚函数成员和纯虚函数
一般虚函数成员的声明语法是:virtual 函数类型 函数名(形参表);在类的定义使用virtual关键字来限定成员函数,虚函数声明只能出现在类定义中的函数原型声明中,而不能在成员函数实现的时候出现。#include <iostream>using namespace std;class Base1{ public: virtual void display() const; // 虚函数 };void Base1::display() const{ cout &原创 2021-01-07 01:54:31 · 284 阅读 · 0 评论 -
C++ 复数类加减法运算重载为成员函数形式
运算符的重载形式有两种,即重载为类的非静态成员函数和重载为非成员函数。运算符重载为类的成员函数的一般语法形式为:返回类型 operator 运算符(形参表){ 函数体}运算符重载为非成员函数的一般语法形式为:返回类型 operator 运算符(形参表){ 函数体}#include <iostream>using namespace std;class Complex{ // 复数类定义 private: double real; // 复数实部 do原创 2021-01-07 01:12:51 · 2011 阅读 · 0 评论 -
C++ 派生类的定义
在C++中,派生类的一般定义语法为:class 派生类名:继承方式 基类名1,继承方式 基类名2,....,继承方式 基类名n{ 派生类成员声明;};派生类成员是指出了从基类继承来的所有成员之外,新增加的数据和函数成员。#include <iostream> using namespace std; // 基类class Shape { protected: int width = 0; int height = 0; public: void se原创 2021-01-07 00:41:28 · 2723 阅读 · 2 评论 -
C++ 常成员函数
使用 const关键字修饰的函数为常成员函数,常成员函数声明的格式如下:类型说明符 函数名(参数表) const;#include <iostream>using namespace std;class Test{ private: int t1, t2; public: Test(int t1, int t2) : t1(t1), t2(t2){} void print(); void print() const;}; void Test::print原创 2021-01-06 21:35:02 · 517 阅读 · 0 评论 -
C++ 友元函数
友元函数是在类中用关键字friend修饰的非成员函数。友元函数可以是一个普通的函数,也可以是其他类的成员函数,虽然它不是本类的成员函数,但是在它的函数体中可以通过对象名访问类的私有和保护成员。#include <iostream>#include <cmath>using namespace std;class Point { private: int x, y; // 私有数据成员 public: Point(int x = 0, int y =原创 2021-01-06 21:13:17 · 267 阅读 · 0 评论 -
C++ 用vector创建数组对象
C++ 标准库提供了被封装的动态数组——vector,这种被封装的数组可以具有各种类型。vector不是一个类,而是一个类模版。用vector定义动态数组的形式为:vector<元素类型>数组对象名(数组长度);尖括号中的类型名表示数组元素的类型。数组长度是一个表达式,表达式中可以包含变量。#include <iostream>#include <vector>using namespace std;// 计算数组arr 中元素的平均值double原创 2021-01-06 20:51:39 · 1304 阅读 · 0 评论 -
C++ 动态创建对象数组
使用运算符 new 也可以创建数组类型的对象,用 new 运算符动态创建一维数组的语法形式为:new 类型名 [数组长度];#include <iostream>using namespace std;class Point{ private: int x, y; public: Point(): x(0), y(0){ cout << "默认构造函数调用." << endl; } Point(int x, int y) :原创 2021-01-06 20:05:10 · 3204 阅读 · 0 评论 -
C++ 平面点类
题目描述设计一个平面点类Point,具有以下属性:横坐标,纵坐标;具有以下成员函数:(1)构造函数(2)显示函数:以“(x,y)”的形式输出点坐标(3)求两个点的L1范数距离的函数(坐标差的绝对值之和)输入描述输入为两行,每行是一个点的坐标(用空格间隔)输出描述输出有三行,前两行是两个点的坐标,第三行是L1范数距离(注意换行):输入样例1 22 1输出样例(1, 2)(2, 1)2#include <iostream>#include<cmath&原创 2021-01-05 21:27:34 · 2691 阅读 · 0 评论 -
C++ 形状类继承
题目描述声明一个 形状(Shape) 抽象类,由其派生出点(Point)类,和直线(Line) 类,三个类均有成员函数Draw(),其中Shape类的Draw()为纯虚函数。给出的主函数在输出样例之后。输入描述输入一个不大于100的正整数n,接下来n组数据。每组数据先输入字符"p"或"l"。如果输入"p",则接下来输入2个正整数为点的坐标;如果输入"l",则接下来输入4个正整数为直线两个端点的坐标输出描述依次输出所有点和直线输入样例3p1 2l5 6 7 8p3 4输出样例原创 2021-01-05 21:01:07 · 1160 阅读 · 0 评论 -
C++ 指向常量的指针与指针类型的常量
(1)声明指向常量的指针时,不能通过指针来改变所指对象的值,但指针本身可以改变,可以指向另外的对象。#include<iostream>using namespace std;int main(){ int a = 6; const int *p1 = &a; // p1是指向常量的指针 cout << "*p1的值改变前:" << *p1 << endl; a = 10; // 变量a中的数值改变后,*p1的值也会发生原创 2021-01-01 18:26:08 · 155 阅读 · 0 评论 -
C++ void类型指针的使用
# include <iostream>using namespace std;int main(){ void * pv; // 声明void类型的指针 int i = 10; pv = &i; // void 类型指针指向整型变量 int *pint = static_cast<int *>(pv); // void 类型指针赋值给 int类型指针 cout << "*pint = " << *pint <原创 2020-12-31 13:19:26 · 678 阅读 · 0 评论 -
C++ Time类重载运算符
题目描述设计一个时间类Time,要求:1、包含时(hour),分(minute),秒(second)私有数据成员;2、包含构造函数,重载关于一时间加上另一时间的加法运算符"+"、重载输出运算符"<<"、重载输入运算符">>"。要求,定义完Time类后,main函数中声明对象time1,time2,time3,然后实现cin>>time1>>time2;time3=time1+time2;cout<<time3<<endl;转载 2020-12-30 21:19:14 · 2169 阅读 · 3 评论 -
C++ 复数类运算符重载
题目描述定义一个复数类Complex,重载运算符"*","<<",">>",使之能够用于复数的乘法、输入、输出main函数中定义复数对象c1,c2,c3,c4,实现cin>>c1>>c2>>c3;c4=c1*c2*c3;cout<<c4<<endl;输入描述输入三个复数,必须用cin>>c1>>c2>>c3;输出描述输出一个复数,必须用cout<<c4&l原创 2020-12-30 21:06:59 · 1198 阅读 · 0 评论 -
C++ 继承Employee类
题目描述定义Employee(员工)类,由Employee分别派生出Saleman(销售员)类和Manager(经理)类,采用虚继承方式。再由Saleman(销售员)类和Manager(经理)类采用多重继承方式派生出新类SaleManager(销售经理)类。要求:(1)在Employee类中包含的数据成员有编号(num)、姓名(name)、基本工资(basicSalary)和奖金(prize)。在Saleman类中还包含数据成员销售员提成比例(deductRate)和个人销售额(personAmoun原创 2020-12-23 17:22:08 · 5213 阅读 · 0 评论 -
C++ 出版公司(继承)
题目描述一个出版公司,同时销售书籍和磁带。创建一个Publication类存储出版物的标题title(字符串类型)和价格price(float类型)。从这个类派生出两个类:一个是Book类,含有表示页数page(int类型)的数据成员;另一个是Tape类,含有一个数据成员表示以分钟为单位的播放时间playTime(float类型)。这3个类都有一个可以通过键盘获得数据的函数GetData( ),和一个显示数据的函数Show()。编写一个main( )程序,通过创建Book类和Tape类的对象来测试这两些类原创 2020-12-22 19:57:13 · 767 阅读 · 0 评论 -
C++ 个人所得税
题目描述假设某城市个人所得税的税基是2000元,而其征收个人所得税的规定如下:不超过税基免征税,按超过税基部分征收所得税。超过部分在2000元以下,征收5%;5000元以下,征税10%;10000元以下,征税15%;10000元以上,征税20%。建立一个incomec类,共包含的数据成员和成员函数如下:income数据成员,表示职工的实际收入;wage数据成员,表示职工工资;taxrate数据成员,表示税率;setWage(double m)成员函数,设置工资值;getTaxrat()成员函数,原创 2020-12-02 22:00:12 · 3112 阅读 · 0 评论 -
C++ 设计员工类(Employee)
题目描述定义一个描述员工(Employee)基本情况的类,数据成员包括编号(num)、姓名(name)、性别(sex)、工资(wage)、人数(count)、总工资(totalWage)。其中姓名定义为长度为18的字符数组,性别定义为长度为3的字符数组,其它数据类型为整型,总工资和人数为静态数据成员,函数成员包括构造函数、显示基本函数(ShowBase)和显示静态数据函数(ShowStatic),其中构造函数由已知参数编号(nu),姓名(nm)、性别(sx)和工资(wg)构造对象,显示基本数据函数用于显示原创 2020-12-02 21:42:18 · 14053 阅读 · 1 评论 -
C++ 学生类
题目描述定义一个类Student,要求使用静态数据成员或静态成员函数计算全班学生的《计算机导论》课程的总成绩和平均成绩。静态数据成员:static int total;静态成员函数:static void Average(){}输入描述学生姓名 课程成绩输出描述总成绩和平均成绩输入样例Zhang 82Li 79Wang 93Liu 66Xia 90输出样例41082程序代码#include <iostream>#include <cstring&g原创 2020-11-30 17:51:34 · 5024 阅读 · 2 评论 -
C++ 使用静态变量和静态方法统计学生分数和学生个数
#include <iostream>#include <cstdlib>using namespace std;int strlen(const char s[]){ int len = 0; while (s[len]){ len++; } return len; // 返回数组str中首个值为null的元素的下标值}char* strcpy(char *p, const char *s){ char *t = p; while (*p+原创 2020-11-30 14:19:22 · 1409 阅读 · 0 评论 -
C++ 对象动态建⽴和释放 new 和 delete
在开发过程中,常常需要动态地分配和撤销内存空间,例如对动态链表中结点的插入与删除。在C语言中是利用库函数malloc和free来分配和撤销内存空间的。C++提供了较简便而功能较强的运算符new和delete来取代malloc和free函数。在C++中因为new和delete是运算符,不是函数,因此执行效率高。虽然为了与C语言兼容,C++仍保留malloc和free函数,建议不用malloc和free函数,而用new和delete运算符。new int; // 开辟⼀个存放整数的存储空间,返回⼀个指向该原创 2020-11-30 10:37:53 · 181 阅读 · 1 评论 -
C++ 不能在构造函数中调用构造函数
#include <iostream>using namespace std;class MyTest{ public: MyTest() { } MyTest(int a, int b, int c){ //有参 构造函数 _a = a; _b = b; _c = c; } // 构造中调⽤构造是危险的⾏为 MyTest(int a, int b){ //有参数的构造函数,两个参数 _a = a; _b = b; /原创 2020-11-30 09:25:34 · 1320 阅读 · 0 评论 -
C++ 构造函数的初始化列表
(1)如果我们有一个类成员,它本身是一个类或者是一个结构,而且这个成员它只有一个带参数的构造函数,没有默认构造函数。这时要对这个类成员进行初始化,就必须调用这个类成员的带参数的构造函数,如果没有初始化列表,那么它将无法完成第一步,就会报错。#include <iostream>using namespace std;class A { private: int m_a; public: A(int a) { co原创 2020-11-29 21:28:32 · 336 阅读 · 0 评论 -
C++ 深拷贝
#include <iostream>#include <cstdlib>using namespace std;int strlen(const char s[]){ int len = 0; while (s[len]){ len++; } return len; // 返回数组str中首个值为null的元素的下标值}char* strcpy(char *p, const char *s){ char *t = p; while (*p+原创 2020-11-29 15:38:33 · 1463 阅读 · 0 评论 -
C++ 拷贝构造函数应用场景
第一个场景#include <iostream>using namespace std;class Test{ public: //默认构造函数。 就是一个无参数的构造函数, //如果不显示提供构造函数,系统就是调用默认的构造函数 /* Test() {} 默认的构造函数,已经手动提供,默认就被隐藏 */ //如果我们提供了一个显示的构造函数,那么默认的构造函数就被隐藏掉了。 //构造函数一旦手动提供, 默认将不复存在。 Test(int x,原创 2020-11-29 15:16:08 · 267 阅读 · 0 评论 -
C++ 拷贝构造函数
#include <iostream>using namespace std;/*由己存在的对象,创建新对象。也就是说新对象,不由构造器来构造,而是由拷贝 构造器来完成。拷贝构造器的格式是固定的。*/class Test{ private: int m_x; int m_y; public: //无参数的构造函数 Test() { m_x = 0; m_y = 0; cout << "调用了无参数的构造函数" <原创 2020-11-29 12:41:33 · 124 阅读 · 0 评论 -
C++ 析构函数
#include <iostream>#include <cstdlib>using namespace std;char* strcpy(char *p, const char *s){ char *t = p; while (*p++ = *s++){ } return t;}class Test{ public: //一个参数的构造函数 Test(){ m_x = 0; m_y = 0; p = (char原创 2020-11-29 11:35:07 · 238 阅读 · 0 评论 -
C++ 判断两个圆是否相交
#include <iostream>#include <cmath>using namespace std;//同类之间无私处。class Point{ public: //设置point的两个坐标 void setXY(int x, int y){ m_x = x; m_y = y; } int getX(){ return m_x; } //根据另一个点,返回两个点之间的距离 double pointDista原创 2020-11-29 11:03:09 · 799 阅读 · 0 评论 -
C++ 判断点是否在圆的内部
点到圆心的距离公式也就是两点间距离公式:#include <iostream>using namespace std;//点类class Point{ public: //设置一个点的坐标 void setXY(int x, int y){ m_x = x; m_y = y; } int getX(){ return m_x; } int getY(){ return m_y; } private: int m原创 2020-11-28 14:30:28 · 2848 阅读 · 0 评论 -
C++ 判断两个立方体是否相等
使用面向过程的方法:#include <iostream>using namespace std;class Cube{ private: int m_a; int m_b; int m_c; public: //设置立方体的长宽高 void setABC(int a, int b, int c){ m_a = a; m_b = b; m_c = c; } int getA() { return m_a; }原创 2020-11-27 21:23:57 · 535 阅读 · 3 评论 -
C++ 椭圆类
题目描述设计并测试一个名为Ellipse的椭圆类:(1)其私有数据成员为外切矩形的左上角与右下角两个点的坐标(4个int型x1,y1,x2,y2)(2)声明4个公有的成员函数分别访问椭圆的外切矩形的顶点坐标(3)设计1个构造函数Ellipse(int,int,int,int)对椭圆的外切矩形的顶点坐标赋值(4)设计1个公有成员函数Area()计算椭圆的面积。输入描述在主函数里输入顶点坐标,并声明一个Ellipse类的对象。输出描述在主函数里调用该对象的成员函数输出外切矩形的顶点坐标,计算并原创 2020-11-23 10:48:02 · 4314 阅读 · 0 评论 -
C++ 设计Date类
题目描述定义一个满足如下要求的Date类.包含Year,Month,Day三个数据成员,以及构造函数,和设置日期函数(1)用下面的格式输出日期:2012年3月5日(2)重新设置日期并编出应用程序,定义日期对象,设置日期,输出该对象提供的日期.输入描述输入初始 年 月 日,用空格隔开输入修改的年 月 日,输出描述输出如下输入样例2012 10 32012 10 7输出样例原日期2012年10月3日修改后日期2012年10月7日#include <iostr原创 2020-11-11 21:32:43 · 2148 阅读 · 0 评论 -
C++ 设计People类-1
题目描述该类的数据成员有Name,Age,Height,Weight,成员函数有构造函数People,进食Eating,运动Sporting,显示Show,其中构造函数用已知参数姓名nm、年龄a、身高h、体重w构造对象,进食函数使体重加1,运动函数使身高加1,显示函数用于显示姓名、年龄、身高、体重。要求数据成员都是private,成员函数都是public访问权限。输入描述首行输入姓名 年龄 身高 体重,用空格隔开,第二行输入一天的进食次数和运动次数输出描述显示一天后这个人的所有信息输入样原创 2020-11-11 20:50:38 · 3606 阅读 · 1 评论 -
C++ 容易犯错误的模型
#include <iostream>using namespace std;class Circle{public: void setR(double r){ m_r = r; } double getR() { return m_r; } double getArea(){ return area; } double getGirth(){ return girth; }private: double m_r; double area原创 2020-11-10 11:46:01 · 133 阅读 · 0 评论 -
C++ 类的封装
使用构造体构造一个Date#define _CRT_SECURE_NO_WARNINGS #include <iostream>using namespace std;struct Date{ int year; int month; int day;};//初始化这个结构体void init_date(struct Date& date){ cout << "year, month, day" << endl; cin >原创 2020-11-09 22:47:47 · 216 阅读 · 1 评论 -
C++ 类和对象
在定义一个类的时候,类的第一个首字母一定要大写,类的命名要遵循大驼峰命名法注:骆峰式命名法就是当变量名或函式名是由一个或多个单字连结在一起,而构成的唯一识别字时,第一个单词以小写字母开始;第二个单词的首字母大写或每一个单词的首字母都采用大写字母!小驼峰法变量一般用小驼峰法标识。驼峰法的意思是:除第一个单词之外,其他单词首字母大写。大驼峰法相比小驼峰法,大驼峰法把第一个单词的首字母也大写。例如:大驼峰命名法:FruitsBanana小驼峰命名法:fruitsBanana#include &l原创 2020-11-09 09:34:41 · 466 阅读 · 0 评论 -
C++函数指针和函数重载
函数重载与函数指针 当使⽤用重载函数名对函数指针进⾏行赋值时 根据重载规则挑选与函数指针参数列表⼀致的候选者 严格匹配候选者的函数类型与函数指针的函数类型方法一:// 声明一个函数类型typedef void (myTypeFunc)(int a, int b);// 定义一个函数指针myTypeFunc* myfuncp = NULL; // 定义一个函数指针 这个指针指向函数的入口地址方法二:// 声明一个原创 2020-11-08 23:40:09 · 320 阅读 · 0 评论 -
C++ 默认参数和占位符
通常情况下,函数在调用时,形参从实参那里取得值。对于多次调用同一函数的同一 实参时,C++给出了更简单的处理办法。给形参以默认值,这样就不用从实参那里取值了。 #define _CRT_SECURE_NO_WARNINGS #include <iostream>using namespace std;// c++中 允许给一个形参 默认设置为一个值, 当外部调用函数的时候,如果不传递参数的,那么x就是100//如果外部传递实参,那么x的值就是实参的值int func1(i原创 2020-11-02 22:19:02 · 853 阅读 · 0 评论 -
C++ 多项式求和
题目描述多项式的描述如下:1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + …现在请你求出该多项式的前n项的和。输入描述每组输入数据是一个正整数n(n<1000)。输出描述对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。输入样例2输出样例0.50#include <iostream>#include <iomanip>using namespace std;int main(){原创 2020-10-30 22:35:29 · 2639 阅读 · 0 评论