C++
C++
程序员十年
“编程控,跑步爱好者,羽毛球场上的快乐制造机。”
展开
-
C++的sort函数如何实现从大到小排序
C++的sort函数如何实现从大到小排序原创 2023-05-23 20:32:47 · 12640 阅读 · 0 评论 -
结构体的通俗理解
struct student{ char name[10]; //姓名 int grade; //成绩 int number; //座位号 char sex; //性别};其实结构体就相当于是一个大箱子(复杂数据类型),这个大箱子用来装小箱子(基本数据类型),每定义一个student的结构体变量,就会有一个大箱子产生,这个大箱子里面就已经伴随了小箱子。结构体的好处就是不用总是去定义那些小箱子,就比如现在有三个同学,如果不用结构体,那么就要定义十二个变量,但如果用了结原创 2021-04-20 21:36:08 · 348 阅读 · 0 评论 -
switch的用法
switch(表达式){ case 常量表达式:语句1;break; case 常量表达式:语句2;break; ....... default:语句n;}注意:①default可以放在任何位置,但是如果不是放在最后的话,就必须要加上break,放最后则可加可不加②常量表达式可以是数字、字母、符号等#include<iostream>using namespace std;int main(){ int i = 1; switch (49)原创 2021-04-18 11:29:43 · 262 阅读 · 0 评论 -
continue和break的区别
continue是跳出本次循环,继续进行下次循环,就相当于将continue作为一个分界线,后面的不进行,只进行前面的break是跳出最邻近的一个循环,只跳一次,不可以跳多个这两者之间的区别主要在于一次和一个,注意好一次循环和一个循环即可一.停内(跳出内部循环,即跳出一个for循环)for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ break;}}二.跳过内部循环的一次(**与一不同**)for (int i = 0;原创 2021-04-16 18:55:52 · 278 阅读 · 0 评论 -
初始化和赋值的区别
初始化时在系统程序运行前进行的,赋值则是相反,在系统程序运行后进行。例如:初始化:int a=1,是系统初始化,先申请一个变量为a,再将这个单元放置1赋值:int a,b=1;a=b;这里是在程序运行后进行的赋值操作...原创 2021-04-17 20:32:55 · 690 阅读 · 1 评论 -
a[i++]和a[++i]的区别
a=i++就是先赋值,再相加a=++i就是先i自增,再相加总之,谁在前就先对谁进行操作int main(){ int k = 0; int a[3] = {1,2,3}; printf("%d", a[++k]);}运行结果是2int main(){ int k = 0; int a[3] = {1,2,3}; printf("%d", a[k++]);}运行结果是1...原创 2021-04-17 12:50:11 · 2746 阅读 · 0 评论 -
基类指针指向派生类对象
A作为基类,B作为派生类基类指针指向派生类对象,只能调用基类原有的,而不能调用派生类中的从pa=&b,这里可看出,解释一下:这里取得是b的首地址,而pa的长度是由数据类型的内存所占大小决定的pb=&a 的话是会报错的,因为pb的长度已经超出了A的内存范围,多出的那一部分可能会乱指,导致安全性缺失。当然pb->showA()也是会报错的,同样的道理。所以,派生类指针不能指向基类对象。构造函数能定义为虚函数?不能,虚函数是需要通过对应的vtable虚指针来调用,而虚指针.原创 2021-06-20 16:02:06 · 6612 阅读 · 1 评论 -
类的继承方式及其区别
1.类的继承方式有哪三种?Public继承、private继承、protected继承2.试比较这三种继承方式之间的差别?相同点:①private继承和protected继承,它们都不可用派生类的对象直接访问基类的任何成员。(与public不同,public继承可以通过对象直接访问基类的任何成员)②无法在派生类的成员函数中访问基类的私有成员(目的:为了不破坏基类的封装性)③派生类成员函数都可以访问基类中原有的非私有成员变量(一阶)不同点:①(基于相同点①)protected继承还可以让该派生原创 2021-06-19 17:55:15 · 2495 阅读 · 0 评论 -
常对象和常对象成员
常对象的定义时const可以放前也可以放后常的只能访问/调用常的,非常则两者都可以。静态和非静态也是这样,静态的只能访问静态的,非静态的两者皆可。常数据成员只能被构造函数初始化,并且要在构造函数的初始化列表中才可以。...原创 2021-06-19 16:04:34 · 166 阅读 · 0 评论 -
new的用法
原创 2021-06-19 11:26:12 · 64 阅读 · 0 评论 -
swap函数
原创 2021-06-19 10:27:06 · 136 阅读 · 0 评论 -
构造函数和析构函数的定义及作用
构造函数的定义:是类中一种特殊的成员函数,它是在对象创建时(声明或new动态创建 )系统自动调用成员函数作用:初始化对象的成员变量析构函数的定义:是类中一种特殊的成员函数,它是在对象生存期结束时,系统自动调用的成员函数作用:析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,delete会自动调用析构函数后释放内存)...原创 2021-06-18 18:06:00 · 4173 阅读 · 0 评论 -
关于初始化成员变量的一些小问题
1.什么时候初始化成员变量答:在对象创建时,调用构造函数,初始化成员变量2.不能在类定义时进行,为什么?答:因为成员变量是属于每一个具体的类的,类定义的时候,无法知道这个成员变量的值属于哪一个对象。...原创 2021-06-18 17:58:28 · 110 阅读 · 0 评论 -
没有拷贝构造函数,会发生什么?
系统会自动调用默认拷贝构造函数,实现浅拷贝。但是浅拷贝只适用于基本的数据类型,并且存在风险,因为当数据成员是指针类型时,两个对象指针有可能指向同一片内存区域。原创 2021-06-18 09:52:48 · 744 阅读 · 0 评论 -
拷贝构造函数中的const和&
平时所用的最普通的拷贝构造函数T(T&t)就是传递对象按值传递原创 2021-06-18 09:21:58 · 358 阅读 · 0 评论 -
关于类中的成员函数在类中声明,在类外定义的小细节
一.友元函数在类中声明在类外定义,只需去掉friend即可重载加法运算符也是如此,并且注意重载加法运算符时,ostream算是一种类型名,这里要加&,并且括号里面的形参也是要加&,全部由三个&至于const加不加不影响语法,可以编译运行(加上去会好一点)记得要return os二.构造函数、析构函数它在外面定义的时候就要类名::类名(———)这个两点的作用域限定符还会在静态成员变量实例化时用到(类名**:????*静态成员变量)三、普通函数void se原创 2021-06-17 20:23:07 · 2360 阅读 · 0 评论 -
*this的一个注意点
*this不能用于静态成员,只能用于非静态成员函数内部*this指的是类的实例,用的形式为(*this).xx或者this->xxthis是实例的地址,实例的指针#include<iostream>#include<iomanip>using namespace std;class CComplex {private: double r, i;public: CComplex(double r = 0, double i = 0) { t原创 2021-06-17 17:59:48 · 490 阅读 · 0 评论 -
new和基类指针指向派生类的一个小例子
#include<iostream>using namespace std;class CInsert{public: virtual void move() {}; virtual void defend() {};};class CAnt :public CInsert{public: void move() { cout << "I’m moving by my legs." << endl; } void defend() {原创 2021-06-11 15:18:48 · 337 阅读 · 0 评论 -
get和cin.getline区别
cin.get(字符数组或指针, 字符个数n, 终止字符)要加入一个字符串结束标志cin.getline(字符数组(或字符指针), 字符个数n, 终止标志字符)遇终止标志字符"/"时停止读取并不放到数组中。原创 2021-06-11 09:11:18 · 75 阅读 · 0 评论 -
虚拟继承:virtual
当出现同名函数时,需要用到virtual,这样的话,就相当于取最新的那个。虚函数及时在原来的定义函数前加virtual//虚基类的做法class A{void test(){cout<<"A";}class B:public virtual A{void test(){cout<<"B";}}//虚函数的做法class A{virtual void test(){cout<<"A";}class B:public A{void .原创 2021-06-04 18:28:36 · 921 阅读 · 0 评论 -
拷贝构造函数(copy constructor)
文章目录引入一、拷贝构造函数与普通构造函数的区别浅拷贝二.代码解释引入CTime(CTime &t1);CTime(CTime&t1) //构造函数是对本类对象的一个引用时,称为拷贝构造{ this->hour=t1.hour; this->minute=t1.minute; this->second=t1.second;}其实这个一开始的想法是出于这么个原因联想到的——变量可以给变量原创 2021-05-21 11:37:56 · 366 阅读 · 0 评论 -
E0144 “const char *”类型的值不能用于初始化“char*”类型的实体(哈夫曼树)
出现了这种问题:E0144 "const char ”类型的值不能用于初始化"char”类型的实体符合模式就是强类型符合模式关了就不是强类型的,大概的类型都能互用。原创 2021-05-17 19:00:34 · 253 阅读 · 0 评论 -
Runtime Error
Runtime Error常见出错的原因可能有以下几种:1、数组开得太小了,导致访问到了不该访问的内存区域2、发生除零错误3、大数组定义在函数内,导致程序栈区耗尽4、指针用错了,导致访问到不该访问的内存区域5、还有可能是程序抛出了未接收的异常一般是程序在运行期间执行了非法的操作造成的...原创 2021-05-15 20:07:47 · 400 阅读 · 0 评论 -
构造函数
构造函数引子:类实例的初始化上次讲到一个类的实例的初始化如果遇到,要初始化的类中含私有成员,需要用到其它实例和函数帮忙。如下:class T{public: int hp;private: int mp;};int main(){ T t2; t2.hp = 1; //这种方式可以初始化hp,但不可以初始化mp,因为mp位于私有区 T t1{t2}; std::cout << t1.hp <<endl; }如果要原创 2021-05-14 20:51:09 · 1007 阅读 · 0 评论 -
OOP(面向对象编程)
文章目录一、面向对象编程1.定义2.理解3.伪代码中体现4.特点二.定义类一、面向对象编程1.定义OOP(Object Oriented Programming)即面向对象编程,本质上是一种编程思想,通过把我们编程中遇到的事物来抽象成对象来编程;与OOP相关的还有OOD(面向对象设计),OOA(面向对象分析)等OOP应当遵循OOD的原则,所有坏的OOP代码基本都是违反了OOD原则2.理解C语言不支持面向对象编程,其实这句话是有点模棱两可,因为面向对象是一种思想,C语言其实也是可以实现,只是不像c原创 2021-05-07 22:18:08 · 1351 阅读 · 0 评论 -
迷宫问题栈求解代码
#include<iostream>using namespace std;const int M = 8, N = 8;int mg[M + 2][N + 2] = { {1,1,1,1,1,1,1,1,1,1},{1,0,0,1,0,0,0,1,0,1}, {1,0,0,1,0,0,0,1,0,1},{1,0,0,0,0,1,1,0,0,1}, {1,0,1,1,1,0,0,0,0,1},{1,0,0,0,1,0,0,0,原创 2021-05-07 17:42:02 · 122 阅读 · 0 评论 -
C++在函数声明时,后面跟个const(转载)
非静态成员函数后面加const(加到非成员函数或静态成员后面会产生编译错误),表示成员函数隐含传入的this指针为 const指针,决定了在该成员函数中,任意修改它所在的类的成员的操作都是不允许的(因为隐含了对this指针的const引用);唯一的例外是对于 mutable修饰的成员。加了const的成员函数可以被非const对象和const对象调用,但不加const的成员函数只能被非const对象调 用。例如:class A{ private: int m_a; pub原创 2021-04-30 15:09:02 · 159 阅读 · 1 评论 -
讲解free delete delete[]区别
delete 用于释放 new 分配的空间,free 有用释放 malloc 分配的空间delete [] 用于释放 new [] 分配的空间delete 释放空间的时候会调用 相应对象的析构函数顺便说一下new在分配空间的时候同时会调用对象的构造函数,对对象进行初始化,使用malloc则只是分配内存调用free 之前需要检查 需要释放的指针是否为空,使用delete 释放内存则不需要检查指针是否为NULLfree 和 delete 不能混用,也就是说new 分配的内存空间最好不要使用使用fre.原创 2021-04-25 22:29:06 · 382 阅读 · 0 评论 -
static 类的静态成员
文章目录一、类的静态成员变量1.共享性2.可无实例访问3.不完全性扩展:static变量统计T的实例个数二、类的静态成员常量三.一、类的静态成员变量我们可以在类中通过static关键字声明一个类的静态成员变量,类的静态成员变量的特点:①所有的类的实例中,共享类中的静态成员变量②类的静态成员变量在没有类的实例的情况下,依然可以访问③类的静态成员变量并不完全属于类class T{public: static int count; //只是普通的说明,并没有给它分配内存空间 int原创 2021-04-23 17:16:50 · 285 阅读 · 0 评论