重载函数

C++--第12课 - 操作符重载 - 上

我的梦境 提交于 2019-11-27 00:11:01
第12课 - 操作符重载 - 上 1. 使用C++标准库 C++标准库并不是C++语言的一部分。C++标准库是由C++语言编写而成的类库和函数的集合。C++标准库中定义的类和对象都位于std命名空间中。C++标准库的头文件都不带.h后缀。C++标准库涵盖了C库的功能。C库中<name.h>头文件对应C++中的<cname>。 C++标准库预定义了多数常用的数据结构,如:字符串,链表,队列,栈等: <bitset> <deque> <list> <map> <queue> <set> <stack> <vector> 例子: #include <cstdio> using namespace std; int main() { printf("Hello World!\n"); printf("Press any key to continue..."); getchar(); return 0; } 现实中的显示器对应于C++标准课中的显示器对象。 现实中的键盘对象对应于C++标准库中的键盘对象。 #include <iostream> using namespace std; int main() { cout<<"Hello World"<<endl; int x; int y; cout<<"1st Parameter: "; cin>>x; cout<<"2nd

C++--第13课 - 操作符重载 - 下

99封情书 提交于 2019-11-27 00:10:56
第13课 - 操作符重载 - 下 思考: 通过operator关键字能够将操作符定义为全局函数,操作符重载的本质就是函数重载。类的成员函数是否可以作为操作符重载的函数? 1. operator+的成员函数实现 #include <cstdlib> #include <iostream> using namespace std; class Complex { int a; int b; public: Complex(int a, int b) { this->a = a; this->b = b; } int getA() { return a; } int getB() { return b; } Complex operator+ (const Complex& c2); //看上去只有一个参数,实际有俩,另一个是this指针 friend ostream& operator<< (ostream& out, const Complex& c); }; ostream& operator<< (ostream& out, const Complex& c) { out<<c.a<<" + "<<c.b<<"i"; return out; } Complex Complex::operator+ (const Complex& c2) { Complex ret(0, 0);

Java类库(一)Arrays工具类

你。 提交于 2019-11-26 22:55:05
数组变集合asList 将数组转换为集合,接收一个可变参数 public static <T> List<T> asList(T... a); public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3); list1.forEach(System.out::println); // 1 2 3 Integer[] data = {1, 2, 3}; List<Integer> list2 = Arrays.asList(data); list2.forEach(System.out::println); // 1 2 3 } 注意:该方法返回的是 Arrays 内部静态类 ArrayList ,而不是我们平常使用 java.util.List 包下的 ArrayList。由于该静态类的底层采用大小固定的数组,所以任何对该 list 的添加、删除操作都会抛出异常。 填充数组fill 用指定元素填充整个数组 //有多个不同数据类型的重载方法,此处列出一个 public static void fill(Object[] a, Object val); public static void main(String[] args) { Integer[] data = {1, 2

java函数的重载

二次信任 提交于 2019-11-26 20:27:56
函数重载:对于一个类中的函数,函数名相同,参数不相同,我们将它的关系称为重载 参数不同的形式:个数不同 类型不同 原因:在程序内部 真正去识别函数的时候 识别的是函数名+所有参数的类型 注意点:重载的函数本质上是不同的函数 总结: 1.函数名必须相同 2.参数必须不同: 个数 类型 位置 不同 就构成重载关系 3.重载与返回值没关系 public static int sum(int a,int b){ return 5; } public static int sum(int b,int a){ //函数名 类型 一样 return 5;//与1不是重载 } 来源: https://www.cnblogs.com/fuyunhou-boke-07/p/11332696.html

运算符小括号重载

一笑奈何 提交于 2019-11-26 20:22:47
函数调用运算符()可以被重用于类的对象。当重载()时,没有创造一个新的调用函数的方式,相反地,这是创建一个可以传递任意数目参数的运算符函数。 /*** bracke.cpp ***/ #include<iostream> using namespace std; class Distance { private: int feet; int inches; public: Distance() { feet = 0; inches = 0; } Distance(int f,int i) { feet = f; inches = i; } void displayDistance() { cout << "F: " << feet << " I: " << inches << endl; } Distance operator()(int a,int b,int c ) { Distance D; D.feet = a + b + 10; D.inches = b + c + 100; return D; } }; int main() { Distance D1(11,10), D2; cout << "First Distance : "; D1.displayDistance(); cout << "Second Distance : "; D2 = D1(10,10,10)

C++成员函数的重载、覆盖与隐藏【转载】

醉酒当歌 提交于 2019-11-26 18:35:51
原文链接 成员函数的 重载、覆盖(override)与隐藏 很容易混淆,C++程序员必须要搞清楚概念,否则错误将防不胜防。 成员函数被 重载 的特征: (1)相同的范围(在同一个类中); (2)函数名字相同; (3)参数不同; (4)virtual 关键字可有可无。 覆盖:派生类函数覆盖基类函数,特征是: (1)不同的范围(分别位于派生类与基类); (2)函数名字相同; (3)参数相同; (4)基类函数必须有virtual 关键字。 函数Base::f(int)与Base::f(float)相互重载,而Base::g(void)被Derived::g(void)覆盖。 #include <iostream.h> class Base { public: void f(int x){ cout << "Base::f(int) " << x << endl; } void f(float x){ cout << "Base::f(float) " << x << endl; } virtual void g(void){ cout << "Base::g(void)" << endl;} }; class Derived : public Base { public: virtual void g(void){ cout << "Derived::g(void)" << endl;}

STL算法学习[转]

ε祈祈猫儿з 提交于 2019-11-26 18:34:36
原文: http://www.cppblog.com/mzty/archive/2007/03/14/19819.html STL算法学习,小结如下: 前提: 下载stl源码: http://www.sgi.com/tech/stl/download.html 打开网页: http://www.sgi.com/tech/stl/stl_index.html 一 函数对象: 因为很多的算法中多使用了函数对象 二元函数对象,V1和V2为输入,V3为结果 plus<T>: transform(V1.begin(), V1.end(), V2.begin(), V3.begin(),plus<double>()); 其他的二元函数对象:minus,multiples,divieds,modulus. 二元断言函数对象,使用时需要bind2nd()或bind1st()来绑定比较对象。 less<T>: find_if(L.begin(), L.end(), bind2nd(less<int>(), 0)); 其他的二元断言函数:equal_to,notequal_to,greater,greater_equal,less_equal,logical_and,logical_or 二元逻辑函数 binary_negate: const char* wptr = find_if(str, str

STL list【转】

▼魔方 西西 提交于 2019-11-26 18:32:48
原文:http://www.cnblogs.com/fangyukuan/archive/2010/09/21/1832364.html 各个容器有很多的相似性。先学好一个,其它的就好办了。先从基础开始。 先看看他们的分类吧 标准 STL 序列容器 :vector、string、deque和list。 标准 STL 关联容器 :set、multiset、map和multimap。 非标准序列容器 slist和rope。slist是一个单向链表,rope本质上是一个重型字符串。 非标准关联容器 hash_set、hash_multiset、hash_map和hash_multimap。 (各容器成员对比见: 【STL】各容器成员对比表 ) 先看看list。 list STL中的list就是一双向链表,可高效地进行插入删除元素。 list不支持随机访问。所以没有 at(pos)和operator[]。 list对象list1, list2分别有元素list1(1,2,3),list2(4,5,6)。list<int>::iterator it; list成员 说明 constructor 构造函数 destructor 析构函数 operator= 赋值重载运算符 assign 分配值 front 返回第一个元素的引用 back 返回最后一元素的引用 begin 返回第一个元素的指针

C++ new 解析重载 【转】

一曲冷凌霜 提交于 2019-11-26 18:31:25
原文: http://www.cnblogs.com/zhoug2020/archive/2012/04/06/2434139.html C++ new用法之一 new运算符 最常用的是作为运算符的new,比如: string *str = new string(“test new”); 作为运算符,new和sizeof一样,是C++内置的,你不能对它做任何的改变,除了使用它。 new会在堆上分配一块内存,并会自动调用类的构造函数。 C++ new用法之二 new函数 第二种就是new函数,其实new运算符内部分配内存使用的就是new函数,原型是: void *operator new(size_t size); new函数返回的是一个void指针,一块未经初始化的内存。如你所见,这和C语言的malloc行为相似,你可以重载new函数,并且增加额外的参数,但是必须保证第一个参数必须是size_t类型,它指明了分配内存块的大小,C++允许你这么做,当然一般情况下这是不必要的。如果重载了new函数,在使用new操作符时调用的就是你重载后的new函数了。 如果使用new函数,和语句string *str = new string(“test new”)相对的代码大概是如下的样子: string * str = (string*)operator new(sizeof(string));

运算符重载和深浅拷贝

邮差的信 提交于 2019-11-26 17:55:23
对于某些运算符号(+,-,*,/....),我们不满足与它原有的操作方式,而是要在对 特有对象 (如负数的加减)进行使用,但是编译器会不允许这样做,因为会与操作符 原本的类型不匹配 而导致操作失败。因此我们需要对运算符进行重载,即赋予它新的意义,从而满足我们的使用需求。 如complex_a和complex_b是两个复数对象求两个复数的和, 希望能直接写:complexa + comple_b  运算符重载的目的是:扩展C++中提供的运算符的适用范围,使之能作用于对象 。  同一个运算符, 对不同类型的操作数,所发生的行为不同。  对于复数对象:complex_a + complex_b => 生成新的复数对象  对于整数:5 + 4 = 9 运算符重载的 实质是函数重载 , 它可以重载为普通函数,也可以重载为成员 ,在对含有该运算法的表达式转换时,调用对应的运算符函数完成重载的操作。( 依据参数的类型进行匹配 ) 1 class Complex 2 { 3 public:double real,imag; 4 Complex( double r = 0.0, double i= 0.0 ):real(r),imag(i) {} 5 Complex operator-(const Complex & c); 6 }; 7 Complex operator + ( const