文章分类 -  c++语法

摘要:我们知道,有时会让一个基类指针指向用 new 运算符动态生成的派生类对象;同时,用 new 运算符动态生成的对象都是通过 delete 指向它的指针来释放的。如果一个基类指针指向用 new 运算符动态生成的派生类对象,而释放该对象时是通过释放该基类指针来完成的,就可能导致程序不正确。例如下面的程序: 阅读全文
posted @ 2020-06-29 21:58 janeyjhon1 阅读(300) 评论(0) 推荐(0)
摘要:如const int &ival 首先如果它只是const非引用形参那么实参是否为const对它没有影响,因为只是传递副本。而当它为非const引用形参,那么它是实参的别名,对它的修改也就是对实参本身的修改,,而当它为const 引用形参 那么将会修改实参的值 而他本身不会修改?那么引用是实参的别名 阅读全文
posted @ 2020-06-28 22:09 janeyjhon1 阅读(386) 评论(0) 推荐(0)
摘要:一个例子 补全该代码:用C++:调用用swap(a,b) 用C:调用用swap(&a,&b),是把地址传进去,然后用*运算取地址的内容 1、引用方式传参,引用相当于是外部变量的别名,实际操作的就是该变量,即在函数内对该变量进行修改的话,在外部该变量也会相应被修改。void ChangeRef(int 阅读全文
posted @ 2020-06-28 21:59 janeyjhon1 阅读(155) 评论(0) 推荐(0)
摘要:1、传值就像图中一样传的是原来实参的一份拷贝,对形参进行操纵不会改变实参的值,函数返回后,函数栈帧销毁,这份拷贝也会自动被回收 2、传指针就是为实参创建一个指针变量,指针变量里面存的就是实参的地址,对形参进行操作也会通过指针的间接访问对实参进行修改,所以对形参的操作会影响原来的值 3、传引用什么也没 阅读全文
posted @ 2020-06-28 21:55 janeyjhon1 阅读(234) 评论(0) 推荐(0)
摘要:如果希望某个对象的值初始化以后就再也不被改变,则定义该对象时可以在前面加 const 关键字,使之成为常量对象(简称“常对象”)。例如: class CDemo{ public: void SetValue(){ } }; const CDemo Obj; // Obj 是常量对象 在 Obj 被定 阅读全文
posted @ 2020-06-28 16:23 janeyjhon1 阅读(314) 评论(0) 推荐(0)
摘要:隐式转换就是不带转换类型的转换 隐式转换:说白了就是在转换时不给系统提示具体的显示模型,让其自动转换,但是要记住一条编译器一般只支持自下而上的类型转换,例如int 转 float int a =4; float b= 5.56; b =a; //这个就是隐式转换,默认的把int a 类型的 转换为f 阅读全文
posted @ 2020-06-28 12:06 janeyjhon1 阅读(581) 评论(0) 推荐(0)
摘要:重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常用来实现功能类似而所处理的数据类型不同的问题。不能只有函数返回值类型不同。 阅读全文
posted @ 2020-06-27 20:22 janeyjhon1 阅读(59) 评论(0) 推荐(0)
摘要:Eg1.都没虚函数 #include<iostream> usingnamespace std; class Father{ public: Father(){ cout <<"this is the Father constructor!"<< endl; } void watchTv(){ co 阅读全文
posted @ 2020-06-27 20:17 janeyjhon1 阅读(99) 评论(0) 推荐(0)
摘要:C++在基类中声明一个带关键之Virtual的函数,这个函数叫虚函数;它可以在该基类的派生类中被重新定义并被赋予另外一种处理功能。通过指向指向派生类的基类指针或引用调用虚函数,编译器可以根据指向对象的类型在运行时决定调用的目标函数。这就实现了多态。 2、实例 #include<iostream> u 阅读全文
posted @ 2020-06-27 20:16 janeyjhon1 阅读(255) 评论(0) 推荐(0)
摘要:1. 概述 简单地说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。例: 其中: B的虚函数表中存放着B::foo和B::bar两个函数指针。 D的虚函数表中存放的既有继承自B的虚函数B::foo,又有重写(overr 阅读全文
posted @ 2020-06-27 20:14 janeyjhon1 阅读(135) 评论(0) 推荐(0)
摘要:还有有的参数是比如void a(char*,T*);这种形式怎样理解呀 形参可以不写 阅读全文
posted @ 2020-06-27 20:11 janeyjhon1 阅读(101) 评论(0) 推荐(0)
摘要:当出现类的等号赋值时,会调用拷贝函数在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指 阅读全文
posted @ 2020-06-27 20:08 janeyjhon1 阅读(53) 评论(0) 推荐(0)
摘要:一、什么是拷贝构造函数 首先对于普通类型的对象来说,它们之间的复制是很简单的,例如: int a=100;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。 下面看一个类对象拷贝的简单例子。 #include<iostream>usingnamespace st 阅读全文
posted @ 2020-06-27 20:07 janeyjhon1 阅读(627) 评论(0) 推荐(0)
摘要:在处理十六进制数据时,我们常常遇到的一个问题就是如何将十六进制转换后为十进制,特别是有特殊要求的格式转换,我这里就遇到了一个特殊要求的转换。 转换要求:一个数值由16位二进制来表示,高低位进行交换操作,并且是补码表示,比如: 4C F7 表示的是F7 4C 将F7 4C表示为二进制,由于最高位为1 阅读全文
posted @ 2020-06-27 19:58 janeyjhon1 阅读(526) 评论(0) 推荐(0)
摘要:特化模板函数 模板变量就是空了 阅读全文
posted @ 2020-06-27 19:56 janeyjhon1 阅读(61) 评论(0) 推荐(0)
摘要:函数重载只会发生在同一个类中,函数名相同,只能通过参数类型,参数个数或者有无const来区分。不能通过返回值类型区分,而且virtual也是可有可无的,即虚函数和普通函数在同一类中也可以构成函数重载。 基类和派生类中只能是隐藏或者覆盖。 1)隐藏是指派生类中有函数与基类中函数同名,但是没有构成虚函数 阅读全文
posted @ 2020-06-27 19:55 janeyjhon1 阅读(92) 评论(0) 推荐(0)
摘要:char a=sizeof(BYTE); //a=1; char b=sizeof(WORD); //b=2; char c=sizeof(DWORD); //c=4; char d=sizeof(int); //d=4; char e=sizeof(LPSTR); //e=4; char f=si 阅读全文
posted @ 2020-06-27 19:54 janeyjhon1 阅读(76) 评论(0) 推荐(0)
摘要:template<classT> classCDerivedpublic T { public: CDerived(); }; template<classT> { cout <<""<< endl; } void main() { CDerived<CBase1>D1; CDerived<CBas 阅读全文
posted @ 2020-06-27 19:53 janeyjhon1 阅读(47) 评论(0) 推荐(0)
摘要:1点等1/72英寸 25.4英寸转毫米 阅读全文
posted @ 2020-06-27 19:52 janeyjhon1 阅读(47) 评论(0) 推荐(0)
摘要:指针函数 声明格式为:*类型标识符函数名(参数表) //指针函数 void* f(int a,int b){ Data * data = new Data; data->a = a; data->b = b; return data; } 指针函数,简单的来说,就是一个返回指针的函数,其本质是一个函 阅读全文
posted @ 2020-06-27 19:50 janeyjhon1 阅读(72) 评论(0) 推荐(0)