随笔分类 -  C++随笔

摘要:发生多态的三个条件一:有继承二:虚函数,且虚函数重写三:父类指针或引用指向子类对象 一、简单的战斗游戏代码实现多态 二、虚析构函数的体现 虚析构函数(delete):基类是char *p,且构造时采用开辟指针大小的方式即 p=new char[20];若基类指针指向派生类,且delete 基类指针, 阅读全文
posted @ 2019-06-11 16:40 LBC不认输 阅读(183) 评论(0) 推荐(0)
摘要:重载 重写 重定义1.重载:一定是同一个作用域下的重载,如同名函数一个在类中,一个在类外则 不是函数重载。2.重写(虚函数):发生在两个不同的类中,一个在父类(声明为virtual),一个在子类3.重定义(普通成员函数):同样发生在两个不同的类中,一个在基类(普通的成员函数),一个在子类 阅读全文
posted @ 2019-06-11 16:36 LBC不认输 阅读(196) 评论(0) 推荐(0)
摘要:class student { public: student(int id,string name) { this->id=id; this->name=name; } private: int id; string name; } class student2:public student { public: student2(in... 阅读全文
posted @ 2019-06-08 16:23 LBC不认输 阅读(1061) 评论(0) 推荐(0)
摘要:一、类的赋值兼容原则: 1.子类对象可以赋值给基类对象 class A { } class B:public A { } 在主函数中: /* A a1; B b1=a1; //不可以,因为b1的空间比a1大,a1赋值过来不满足空间大小 */ /* B b1; A a=b1; //可以进行,a1只用到b1的部分地址 */ 2.子类对象可以当做父类对象使用 (即通俗理解父类中的代... 阅读全文
posted @ 2019-06-05 11:00 LBC不认输 阅读(1254) 评论(0) 推荐(0)
摘要:关于友元通常情况下访问一个类中的私有成员必须调用其类的成员函数进行访问但如果在类中声明一个友元函数,类外定义时传入的参数是类的对象,那可以直接通过对象+"."引用私有成员(适合频繁地访问类的数据成员)友元的作用提高了程序的运行效率,但它破坏了类的封装性和隐藏性,使得非成员函数可以访问类的私有成员 注 阅读全文
posted @ 2019-05-28 23:25 LBC不认输 阅读(260) 评论(0) 推荐(0)
摘要:一、C++中重载运算符函数的方式: 以重载‘-’号为例,自定义为乘法。 第一种是直接在类内声明定义:(返回值是本类的对象) 第二种是在类中声明为友元函数,类外定义,返回值的是一个类的对象。(一般为了能在类外直接调用成员而不用通过成员函数间接调用成员数据) 二、C++中操作符重载函数 操作符重载函数中 阅读全文
posted @ 2019-05-28 23:14 LBC不认输 阅读(6406) 评论(0) 推荐(2)
摘要://MyArray.h #pragma once #include using namespace std; class MyArray { public: MyArray(); MyArray(int len); //创建一个len长度的数组 MyArray(const MyArray &another); //数据成员含有指... 阅读全文
posted @ 2019-05-28 13:29 LBC不认输 阅读(1405) 评论(0) 推荐(0)
摘要:函数重载和函数指针 int func(int a,int b) { coutfunc(int,int)函数(参数类型个数匹配) fp1(10,30); fp1(10,30,20) //错误,fp1已经是指向了func(int,int)函数 //三个参数的函数同理 } 在给函数指针赋值的时候,发生函数重载匹配 在调用函数指针的时候,所调用的函数... 阅读全文
posted @ 2019-05-25 23:18 LBC不认输 阅读(4854) 评论(0) 推荐(0)
摘要:test t2(t1);当出现有类似拷贝时,若类中数据成员涉及指针,则应在类中显示定义深拷贝函数,即在拷贝函数中为指针开辟空间再进行拷贝赋值若只是使用默认的拷贝构造函数的话,因为此时t2的指针与t1的指针同时指向同一个地址,而当t2析构时,此地址空间被释放,再到t1析构时,已经不存在那个公共的地址了 阅读全文
posted @ 2019-05-25 23:15 LBC不认输 阅读(560) 评论(0) 推荐(0)
摘要://new开辟10个数组元素 int *array =new int[10]; //delete释放开辟的数组 delete[] array; //使用New开辟对象空间 Test *p=new Test(10,10); //用New可以直接调用构造函数,但用Malloc则不可以,需要调用成员函数初始化 //free不能调用对象的析构函数,所以用delete比较好,否则可能造成内存泄漏... 阅读全文
posted @ 2019-05-25 23:09 LBC不认输 阅读(139) 评论(0) 推荐(0)
摘要:下面是简单的代码测试 阅读全文
posted @ 2019-05-25 22:59 LBC不认输 阅读(228) 评论(0) 推荐(0)
摘要:void operator=(const Test &another) { x = another.x; y = another.y; } 阅读全文
posted @ 2019-05-23 09:32 LBC不认输 阅读(152) 评论(0) 推荐(0)
摘要:关于#pragma once简单说明若涉及多个文件的编译运行,如果把所有头文件,源文件都添加到当前工程下,并且每个头文件都没有加#pragma once,若在主函数include各个CPP,则会报错,类型重定义(这样理解,编译的时候自动调用了一次,如果在主函数中再include一次,则相当于头文件调 阅读全文
posted @ 2019-05-22 23:50 LBC不认输 阅读(264) 评论(0) 推荐(0)
摘要:一、函数的默认参数必须放在参数位置的最后如void show(int a,int b,int c=100); void show(int a,int b=100,int c=100); 1.主函数中调用函数时不使用默认参数: 2.主函数中调用函数时使用默认参数: 二、占位参数 如void show( 阅读全文
posted @ 2019-05-22 11:25 LBC不认输 阅读(160) 评论(0) 推荐(0)
摘要:函数形参列表(参数个数,参数类型,参数顺序) 函数重载:函数名相同,参数列表不同注意!1.函数返回值不是构成函数重载的条件。 2.函数重载避免函数出现冲突,二义性,不要写默认参数。 --简单的函数重载的几种情况: 阅读全文
posted @ 2019-05-22 11:22 LBC不认输 阅读(190) 评论(0) 推荐(0)
摘要:一、引用更多的是用于函数参数的传递,类似于指针,但比指针稍微方便形参的值通过函数改变了,那么返回的实参的值也会改变。简单记为(对某个变量的引用,则这个引用就是该变量的别名,对引用的操作,即对该变量的操作) 二、引用作为函数返回值 引用作为函数的返回值,1.在主函数中可以用普通的变量=XXX(),In 阅读全文
posted @ 2019-05-16 16:24 LBC不认输 阅读(342) 评论(0) 推荐(0)
摘要:一、const修饰指针变量时: 通俗理解: 1.当const位于*左边时(内容不可修改),表示不可以通过指针修改指向的地址值。但指针可以指向其他地址。同样,其他方式也可以修改该指针指向的变量的值。 2.当const位于*右边时(指针本身不可修改),表示当前指针不可修改,即指针只能指向当前所指的地址, 阅读全文
posted @ 2019-05-16 09:38 LBC不认输 阅读(279) 评论(0) 推荐(0)
摘要:文件输入输出方式设置值 阅读全文
posted @ 2019-05-13 18:07 LBC不认输 阅读(259) 评论(0) 推荐(0)
摘要:有两种方法:(1)采用重载双目运算符方式 (2)1.类型转换函数(将类的对象转换为其他数据类型) 2.转换构造函数(将其他类型转换为类的对象)(仍然要配合重载双目运算符的方式,因为最终实现的是类的两个对象相加) (注意:类型转换函数和转换构造函数不可同时使用,会出现二义性!) /*以下程序均以‘+’为例!*/一:采用重载运... 阅读全文
posted @ 2019-05-10 11:20 LBC不认输 阅读(1222) 评论(0) 推荐(0)
摘要:重载双目运算符需要涉及到两个对象,则在写operator构造函数的时候要注意参数的传递 阅读全文
posted @ 2019-05-10 10:31 LBC不认输 阅读(214) 评论(0) 推荐(0)