C++学习记录-面向对象-运算符重载3-递增递减运算符重载
C++学习记录-面向对象-运算符重载3-递增递减运算符重载 先来创建一个类 1234class level {public: int lv;}; 一、递增递减运算符 递增运算符++ (1).前置递增:先递增,再取值。因此前置递增应该返回递增后的值。为了实现可以连续前置递增,应该返回一个引用。若返回的是一个类,连续递增时不会影响实际的值(类似于值传递和引用传递的关系) 返回引用而不返回指针是为了不要解引用,方便。 示例: 123456level& operator++(){ lv++; return *this;}//返回了level类的一个引用。 分析:由于该函数不需要传入参数,则利用解引用this指针来返回 (2).后置递增:先取值,再递增。因此应该先创建一个临时对象储存,实现递增后返回临时对象。 此处应该返回的是一个值。因为函数执行完后临时对象就会被销毁,不可以返回引用,否则是非法操作。 示例: 123456level operator++(int){ level temp =...
C++学习记录-函数模板
C++学习记录-函数模板 一、模板 C++的另一种编程思想是 泛型编程 ,主要利用了模板 模板机制有两种,函数模板 和 类模板 二、函数模板 函数模板的作用: 建立一个通用函数,函数的返回值类型和参数类型都不确定,交由系统根据传入的数据类型进行判断。 语法: 12template<typename T>//函数的定义 template:声明创建模板 typename:表示后面的符号是一种数据类型,可以用**class(类模板)**替代 T:一个名称,可以替换,通常使用大写字母 三、示例 12345678910template<typename T>//声明使用模板//函数的定义,返回值,参数的数据类型都交由系统判定T swaper(T& a, T& b){ T temp = a; a = b; b = temp; return a;} 12345//调用函数string a = "神里绫华";string b = "神里绫人";cout <<...
C++学习记录-面向对象-运算符重载2-左移运算符重载
C++学习记录-面向对象-运算符重载2-左移运算符重载 一、 左移运算符重载,若写在类内作为成员函数,则调用时要 参数在前,cout在后,效果不行 因此,左移运算符重载应当作为全局函数 二、语法与示例 语法: 返回值类型 operator符号**(参数列表)** {方法} 示例: 1234567891011121314class chara {public: string name; string weapon;public: chara(string a, string b) :name(a),weapon(b) {}};//全局函数重载左移运算符void operator<<(ostream &cout, chara& p){ cout << p.name << endl; cout << p.weapon << endl;} 12chara sllh("神里绫华",...
C++学习记录-面向对象-运算符重载1.加号重载
C++学习记录-面向对象-运算符重载1.加号重载 一、运算符重载 为了方便和简洁,对已有的运算符进行重新定义,使其适应不同的数据类型 语法: 返回值类型 operator符号 (参数列表) {方法} 实现形式: 作为成员函数 作为全局函数 注意:内置数据类型的运算表达式没法改变!!! 加号的重载: 示例: 1.作为成员函数 12345678910111213141516class chara {public: string name; string weapon;public: chara(string a, string b) :name(a),weapon(b) {} //通过成员函数重载加号 chara operator+(chara& b) { chara temp("0", "0"); temp.name = this->name + " " + b.name; ...
C++学习记录-面向对象-拷贝构造函数的调用时机
C++学习记录-面向对象-拷贝构造函数的调用时机 拷贝构造函数的调用时机 用一个对象来初始化另一个对象 将一个对象以值传递的方式作为参数传入函数中 以对象作为函数的返回值的时候 示例: 1.用一个对象来初始化另一个对象 1234567891011121314class chara {public: string name;public: chara() { cout << "chara默认构造函数的调用" << endl; }//默认构造函数 chara(const chara &p) { cout << "chara拷贝构造函数的调用" << endl; }//拷贝构造函数}; 12chara p1;chara...
C++学习记录-面向对象-拷贝构造函数
C++学习记录-面向对象-拷贝构造函数 拷贝构造函数 拷贝构造函数是构造函数的一种,它传入的参数是一个类 示例: 123456789101112131415class chara {private: string name;public: chara() { cin >> name; } //这个是拷贝构造函数 chara(const chara &p) { name = p.name; }}; 可以看到拷贝构造函数有以下几点要求: 传入的参数是一个类 必须是引用传递 必须以 const 修饰 拷贝构造函数可以将传入的类赋值给自己的类,相当于复制了一个类 //安度因表示很赞 调用示例: 12345678int main(){ chara p1;//创建一个对象p1 chara p2(p1);//创建一个对象p2,并将p1传入其拷贝构造参数中 cout <<...
C++学习记录-函数的重载
C++学习记录-函数的重载 一、函数重载 重载的意义:使用相同的函数名,但传入的参数和函数内部的方法有所不同,提高了代码的复用性。 二、重载的条件 函数的参数不同:参数个数,参数类型,参数顺序等 函数的返回值不可作为重载的条件!! 示例: 123456789101112//函数的重载void fun(){ cout<<"fun()"<<endl;}void fun(int a){ cout<<"fun(int a)"<<endl;}//对fun函数进行了重载,调用时程序会根据传入的参数来调用不同的函数 三、函数重载遇到引用和默认值的情况 遇到引用: 12345678910void fun(int &a){ cout<<"int &a"<<endl;}void fun(const int &a){ ...
C++学习记录-函数的占位参数
C++学习记录-函数的占位参数 一、占位参数 函数的参数列表中可以有占位参数,占位参数只声明数据类型而不声明名字。 在调用函数时必须传入占位参数 示例 12345678910void print(int a, int)//有占位参数{ cout << "这个有占位参数" << endl;}int main(){ print(10, 20);//传入时要传入占位参数的值} 占位参数也可以有默认值,有默认值时如果调用不传值会以默认参数进行 同理后面的参数也要带有默认值 12345678910void print(int a, int=20)//占位参数有默认值{ cout << "这个有占位参数" << endl;}int main(){ print(10);//以默认值进行} 占位参数可以在中间 123456789void print(int a, int, int c)//在中间占位{ cout...
C++学习记录-vector
C++学习记录-STL:vector 一、认识vector 1.vector是向量类型,可以存储多种类型的数据,因此属于STL中容器的一种 2.vector可以理解为动态数组。内存动态扩展的方式为:新开辟一块更大的内存,将数据拷贝过去, 再释放原来的内存 3.使用vector时应包含头文件 4.vector容器中也可以存放自定义的数据类型(比如类),也可以存放另一个容器,只要声明数据 类型即可 二、vector的初始化 语法:vector<数据类型> 名称 1234567891011121314- vector<int> a;//向量名为a - vector<int> a(10);//向量名为a,具有10个整形元素- vector<int> a(10,777);//向量名为a,具有10个整形元素且都为777- int b[3]={0,1,2}; vector<int>...
C++学习记录-面向对象-成员函数做友元问题
C++学习记录-面向对象-成员函数做友元问题 以下成员函数做友元代码: 123456789101112131415161718class chara { friend void search::printinfo(chara* ch);//添加成员函数为友元 public: string name;private: string weapon;};class search {public: void printinfo(chara* ch) { cout << "角色:" << ch->name << endl; cout << "使用武器:" << ch->weapon <<...




