重载函数

Java相关知识2

♀尐吖头ヾ 提交于 2019-12-17 05:32:00
11、是否可以从一个static方法内部发出对非static方法的调用? 不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。 12、Integer与int的区别 int是java提供的8种原始数据类型之一。Java为每个原始类型提供了封装类,Integer是java为int提供的封装类。int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况。 例如:要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的默认为null,所以用el表达式在文本框中显示时,值为空白字符串,而int默认的默认值为0,所以用el表达式在文本框中显示时,结果为0,所以,int不适合作为web层的表单数据的类型。 在Hibernate中,如果将OID定义为Integer类型

第69课.技巧:自定义内存管理

落爺英雄遲暮 提交于 2019-12-16 10:19:21
1.统计对象中某个成员变量的访问次数 注意:对象(普通对象,只读对象) eg: #include <iostream> #include <string> using namespace std; class Test { int m_value; int * const m_pCount; public: Test(int value = 0) : m_pCount(new int(0)) { m_value = value; } int getValue() const { *m_pCount = *m_pCount + 1; return m_value; } void setValue(int value) { *m_pCount = *m_pCount + 1; m_value = value; } int getCount() const { return *m_pCount; } ~Test() { delete m_pCount; } }; int main() { // 普通对象 Test t; t.setValue(100); cout << "t.m_value = " << t.getValue() << endl; cout << "t.m_count = " << t.getCount() << endl; // 只读对象 const Test ct

流运算符的重载

送分小仙女□ 提交于 2019-12-15 14:48:37
Conclusion1: 流插入运算符需要被重载成全局函数。 一:流运算符的重载: cout<<10<<endl; cout是在iosream中定义的一个ostream对象 iostream中对“<<”进行了重载。 cout<<10; 即 cout.operator<<(10); ostream & ostream::operator<<(int n){ …… return *this; // *this 就是cout } 也就是说,cin和cout是定义在std namespace中的对象,通过cout<<10,其实就是调用的cout对象的成员函数,即out.operator<<(10); 因为cout是一个对象,所以其实在这里还是会添加一个this指针。 二:流插入运算符为什么要被重载为全局函数 假设有Complex对象c, 如果要用cout<<c来输出, 就要对“<<“重载。 但是 1)不能在ostream类中对"<<"重载,因为ostream类已经被封装好了。 2)不能在Complex类中对"<<"重载,否则*this对象会混淆。(主要是出于使用的习惯,下面介绍) class Complex { public: int a,b; Complex(int n1, int n2):a(n1), b(n2){} }; ostream &operator<<(ostream &os

java面试题

痞子三分冷 提交于 2019-12-15 04:40:07
Java面试题(一) 1、面向对象的特征有哪些方面? 2、访问修饰符 public,private,protected,以及不写(默认)时的区别? 3、String 是最基本的数据类型吗? 4、float f=3.4;是否正确? 5、short s1 = 1; s1 = s1 + 1;有错吗?short s1 = 1; s1 += 1;有错吗? 6、Java 有没有 goto? 7、int 和 Integer 有什么区别? 8、&和&&的区别? 9、解释内存中的栈(stack)、堆(heap)和方法区(method area)的用法。 10、Math.round(11.5) 等于多少?Math.round(-11.5)等于多少? 11、switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? 12、用最有效率的方法计算 2 乘以 8? 13、数组有没有 length()方法?String 有没有 length()方法? 14、在 Java 中,如何跳出当前的多重嵌套循环? 15、构造器(constructor)是否可被重写(override)? 16、两个对象值相同(x.equals(y) == true),但却可有不同的 hashcode,这句话对不对? 17、是否可以继承 String 类? 18

C++深度剖析教程9 --- 函数重载分析(下)

佐手、 提交于 2019-12-15 00:40:12
学习交流可以添加 微信读者交流①群 (添加微信:coderAllen,备注加群) 程序员技术QQ交流①群:736386324 C++教程所有源码地址: https://github.com/lkk789/C-Learn-Source-code 1.重载与指针 下面的函数指针将保存哪个函数的地址?第一个 函数重载遇上函数指针 将重载函数名赋值给函数指针时 1.根据重载规则挑选与函数指针参数列表一致的候选者 2.严格匹配候选者的函数类型与函数指针的函数类型 9-1 函数重载VS函数指针 # include <stdio.h> # include <string.h> int func ( int x ) { return x ; } int func ( int a , int b ) { return a + b ; } int func ( const char * s ) { return strlen ( s ) ; } typedef int ( * PFUNC ) ( int a ) ; int main ( int argc , char * argv [ ] ) { int c = 0 ; PFUNC p = func ; c = p ( 1 ) ; printf ( "c = %d\n" , c ) ; return 0 ; } 运行结果 注意 1

单片机蜂鸣器的控制程序与驱动电路图

ⅰ亾dé卋堺 提交于 2019-12-14 02:24:44
蜂鸣器从结构区分分为压电式蜂鸣器和电磁式蜂鸣器。压电式为压电陶瓷片发音,电流比较小一些,电磁式蜂鸣器为线圈通电震动发音,体积比较小。按照驱动方式分为有源蜂鸣器和无源蜂鸣器。这里的有源和无源不是指电源,而是振荡源。有源蜂鸣器内部带了振荡源,如图1中所示,给了 BUZZ 引脚一个低电平,蜂鸣器就会直接响。而无源蜂鸣器内部是不带振荡源的,要让他响必须给 500Hz~4.5KHz 之间的脉冲频率信号来驱动它才会响。有源蜂鸣器往往比无源蜂鸣器贵一些,因为里边多了振荡电路,驱动发音也简单,靠电平就可以驱动,而无源蜂鸣器价格比较便宜,此外无源蜂鸣器声音频率可以控制,而音阶与频率又有确定的对应关系,因此就可以做出来“do re mi fa sol la si”的效果,可以用它制作出简单的音乐曲目,比如生日歌、两只老虎等等。 来看一下图1的电路,蜂鸣器电流依然相对较大,因此需要用三极管驱动,并且加了一个 100 欧的电阻作为限流电阻。此外还加了一个 D4 二极管,这个二极管叫做续流二极管。我们的蜂鸣器是感性器件,当三极管导通给蜂鸣器供电时,就会有导通电流流过蜂鸣器。而我们知道,电感的一个特点就是电流不能突变,导通时电流是逐渐加大的,这点没有问题,但当关断时,经“电源-三极管-蜂鸣器-地”这条回路就截断了,过不了任何电流了,那么储存的电流往哪儿去呢,就是经过这个 D4 和蜂鸣器自身的环路来消耗掉了

c++ 中的重载全局new,delete

馋奶兔 提交于 2019-12-13 14:39:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 最近做一个小项目,对c++又有很多新的理解。实在不的不让人发出感叹,c++太强大了,绝对不是一朝一夕就可以领悟她的内涵的。 首先我们要清楚,为什么我们要重载new,和delete了?这还不是指针造成的,确实指针是一件让人喜欢的东西,用起来如此让人喜欢,让人顺手。然而小程序我们完全可以避免内存泄露问题,大程序就不那么容易了,然而我们有一种特别好的方法可以跟踪我们new,和delete动作,找到未被释放的内存。办法是什么呢?微软给我们提供了一种很好的方法,那就是重载new,和delete。 在实现之前我们要清楚new,和delete的工作机理,这是个多么好的学习机会啊! 对与new操作符,其实和sizeof一样,都是c++内置的,然而像strlen就不是了,strlen属于函数。对于new的功能我们是没有办法改变的,当我们new一个对象时,new为我们做了两件事情,一、申请一块足够的内存空间供存放对象,对于new一个数组对象,编译器会计算出总共的空间,然后执行类似c语言中malloc函数类似的功能。二、初始化对象,对于单个对象,包括包括基本对象和类对象,可以通过括号初始化,比如int * pn = new int(3); A * pa = new A(3); 然而对于数组不能初始化,对于类对象

C++动态内存:(二)重载new和delete

别等时光非礼了梦想. 提交于 2019-12-13 14:36:57
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 一、重载的原因 用new创建动态对象时会发生两件事:(1)使用operatoe new()为对象分配内存(经常是调用malloc)(2)调用构造函数来初始化内存。相对应的调用delete运算符会(1)首先调用析构函数(2)调用operator delete()释放内存(经常是调用free)。我们无法控制构造函数和析构函数的调用,是由编译器调用的。但可以改变内存分配函数operator new()和operator delete()。链接:C++中的new/new[],delete/delete[] 使用了new和delete的内存分配系统是为了通用目的而设计的,但是在特殊的情形下并不能满足需要。最常见的改变分配系统的原因常常是出于效率考虑: (1)增加分配和归还的速度。创建和销毁一个特定的类的非常多的对象,以至于这个运算成了速度的瓶颈。 (2)堆碎片。分配不同大小的内存会在堆上产生很多碎片,以至于虽然内存可能还有,但由于都是碎片,找不到足够大的内存块来满足需要。通过为特定的类创建自己的内存分配器,可以确保这种情况不会发生。例如在嵌入式和实时系统里,程序可能必须在有限资源情况下运行很长时间,这样的系统就要求内存花费相同的时间且不允许出现堆内存耗尽或者出现很多碎片。 (3)检测运用上的错误。例如:new所得的内存

C++类或结构作为map的key值

心已入冬 提交于 2019-12-12 20:19:12
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1.只有重载<的类或者结构才能作为map的key值。 string可以作为key值是因为string重载了< 2.如果不重载<会提示如下错误: error C2676: 二进制“<”: “const C”不定义该运算符或到预定义运算符可接收的类型的转换 3.重载<但是没有实现会提示如下错误: Expression: invalid operator< 比如bool operator < (const C &c) const{return true;} #include < string > #include <map> using namespace std; // 重载<的类或结构才能作为map的key值 class C { public : int i; string str; bool operator < ( const C &c) const { return i < c.i; } }; void main() { map<C, int > mapC; C c0; c0.i = 0 ; c0.str = " str1 " ; mapC.insert(pair<C, int >(c0, 0 )); C c1; c1.i = 1 ; c1.str = " str2 " ; mapC.insert(pair

C++ 基础语法 快速复习笔记(3)---重载函数,多态,虚函数

北慕城南 提交于 2019-12-10 02:42:10
1.重载运算符和重载函数: C++ 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义(实现)不相同。 当您调用一个重载函数或重载运算符时,编译器通过把您所使用的参数类型与定义中的参数类型进行比较,决定选用最合适的定义。 选择最合适的重载函数或重载运算符的过程,称为重载决策。 a.函数重载: 在同一个作用域内,可以声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同。您不能仅通过返回类型的不同来重载函数。 b.运算符重载: 您可以重定义或重载大部分 C++ 内置的运算符。这样,您就能使用自定义类型的运算符。 重载的运算符是带有特殊名称的函数,函数名是由关键字 operator 和其后要重载的运算符符号构成的。与其他函数一样,重载运算符有一个返回类型和一个参数列表。 详细例子: https://www.runoob.com/cplusplus/cpp-overloading.html 2.多态: 多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。 C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。 例子: https://www.runoob