为了账号安全,请及时绑定邮箱和手机立即绑定
  • #include <vector> #include <map> #include <string> #include <iostream> using namespace std; int main(void) { // 使用vector存储数字:3、4、8、4 vector<int> vec; vec.push_back(3); vec.push_back(6); vec.push_back(8); vec.push_back(4); //循环打印数字 vector<int>::iterator itor = vec.begin(); for(;itor!=vec.end();itor++) { cout<<*itor<<endl; } // 使用map来存储字符串键值对 map<string, string> m; pair<string,string> p1("S","Shang Hai"); pair<string,string> p2("B","Bei Jing"); pair<string,string> p3("G","Guang Zhou"); m.insert(p1); m.insert(p2); m.insert(p3); // 打印map中数据 map<string,string>::iterator itor1 = m.begin(); for(;itor1 != m.end();itor1++) { cout<<itor1->first <<endl; cout<<itor1->second<<endl; } return 0; }
    查看全部
    0 采集 收起 来源:单元巩固

    2018-03-22

  • #include <iostream> using namespace std; /** * 定义一个矩形类模板Rect * 成员函数:calcArea()、calcPerimeter() * 数据成员:m_length、m_height */ template <typename T> class Rect { public: Rect(T length,T height); T calcArea(); T calcPerimeter(); public: T m_length; T m_height; }; /** * 类属性赋值 */ template <typename T> Rect<T>::Rect(T length,T height) { m_length = length; m_height = height; } /** * 面积方法实现 */ template <typename T> T Rect<T>::calcArea() { return m_length * m_height; } /** * 周长方法实现 */ template <typename T> T Rect<T>::calcPerimeter() { return ( m_length + m_height) * 2; } int main(void) { Rect<int> rect(3, 6); cout << rect.calcArea() << endl; cout << rect.calcPerimeter() << endl; return 0; }
    查看全部
    0 采集 收起 来源:单元巩固

    2018-03-22

  • #include <iostream> using namespace std; /** * 定义模板函数swapNum * 实现功能:交换两个数的位置 */ template<typename T> void swapNum(T &a,T &b) { T temp = a; a = b; b = temp; } int main(void) { int x = 10; int y = 20; // 调用模板函数 swapNum<int>(x,y); cout << "x = " << x << endl; cout << "y = " << y << endl; return 0; }
    查看全部
    0 采集 收起 来源:单元巩固

    2018-03-22

  • #include <iostream> using namespace std; /** * 定义Coordinate类 * 数据成员:m_iX,m_iY * 成员函数:构造函数 * 重载--运算符,重载+运算符 */ class Coordinate { public: Coordinate(int x, int y) { m_iX = x; m_iY = y; } // 前置--运算符重载 Coordinate& operator --() { m_iX--; m_iY--; return *this; } // 后置--运算符重载 Coordinate operator --(int) { Coordinate old(*this); m_iX--; m_iY--; return old; } // +号运算符重载 Coordinate operator +(Coordinate& c) { Coordinate temp(0,0); temp.m_iX = this->m_iX + c.m_iX; temp.m_iY = this->m_iY + c.m_iY; return temp; } public: int m_iX; int m_iY; }; int main(void) { Coordinate coor1(1, 3); Coordinate coor2(2, 4); Coordinate coor3(0, 0); coor1--; --coor2; coor3 = coor1 + coor2; cout << coor3.m_iX << endl; cout << coor3.m_iY << endl; return 0; }
    查看全部
    0 采集 收起 来源:综合练习

    2018-03-22

  • #include <vector> #include <map> #include <string> #include <iostream> using namespace std; int main(void) { // 使用vector存储数字:3、4、8、4 vector<int> vec; vec.push_back(3); vec.push_back(6); vec.push_back(8); vec.push_back(4); //循环打印数字 vector<int>::iterator iter1 = vec.begin(); for(; iter1!=vec.end(); iter1++) { cout<<*iter1<<endl; } // 使用map来存储字符串键值对 map<string, string> m; pair<string,string> p1("S","Shang Hai"); pair<string,string> p2("B","Bei Jing"); pair<string,string> p3("G","Guang Zhou"); m.insert(p1); m.insert(p2); m.insert(p3); // 打印map中数据 map<string,string>::iterator iter2 = m.begin(); for(; iter2!=m.end(); iter2++) { cout<<iter2->first<<"-"; cout<<iter2->second<<endl; } return 0; } 我在VS下编译运行通过了,怎么在这里运行出错
    查看全部
    0 采集 收起 来源:单元巩固

    2018-03-22

  • 模板类的定义前要声明template模板 模板类的每个成员函数前都要加template声明 并且定义时,需写成类名<模板类型名>::函数名() 模板类的定义与声明必须写在一个文件内,否则会编译失败
    查看全部
    0 采集 收起 来源:单元巩固

    2018-03-22

  • 和函数重载本质一致
    查看全部
  • 为什么<<运算符的重载必须定义为友元 如果在类中定义非码友元成员函数,默认第一个参数默认会传入this*指针,这时就无法实现cout在前<<对象在后的格式 因为二元运算符中的调用格式是 参数一 运算符 参数二 这也就是为什么 加号运算符可以使用非友元成员函数,因为参数一是一个this*指针,参数二是其它对象 假设定义为非友元成员函数,那么第一个参数系统默认为this*(且无法更改),第二个参数是cout 那么调用格式就变成了 coor << cout了,这就是不能定义为非友元成员函数的原因
    查看全部
  • operator定义了多个函数重载,定义了能传入一到两个参数的operator 为什么后置要传入int? 在一元operator中,运算符要放在参数前面,也就是operator++(*this),在程序中调用一元运算符的格式: ++coor,-coor operator(int)其实是二元函数,只是第二个参数是通过隐性的方式传入参数,传入int就相当于定义了二元运算符,也就是(this*, int),这时运算符的格式就是this*指针加运算符加int类型,再给int传入一个默认值1 例如c++1,这就满足了运算符的格式,因此在使用时变成了c++,函数会执行,而内部如何处理,就由我们随便处理 为什么定义友元类的时候就要传入参数? 因为如果在类中定义非友元运算符(成员函数),那么默认将传入一个*this指针。 而在定义友元类,在类外定义函数,其实就是给予一个函数对该类所有对象数据的修改权限 但是这个函数默认不会传入*this指针,因为需要在参数表中传入 例如 在类的定义中定义了Coordinate& operator-() 系统默认传入了一个this指针 而在友元运算符中,因为opertor必须至少传入一个参数,因此需要传入一个coordinte对象。
    查看全部
  • 回复天涯胡星的那个同学: 很多人连前++和后++分不清,其实这是很基础的东西,老师讲这个是以大家都懂的情况下讲的。 给大家出道面试题: int i = 3; i = (++i) * (i++); 答案是16.(由于只执行了一次+,但却同时打印,所以是4*4=16)
    查看全部
  • 关键字Static 静态数据成员 静态数据成员作为一个类的数据成员,它属于该类对象所共有的数据成员,且只占用一个(全局数据成员),并不会因为该类有多个对象实例化而多占用多个位置空间 一般用于计算实例化对象的个数,在构造函数及析构函数中加减。 静态成员函数 静态成员函数作为类的全局函数,因此它不带this*指针来指向自身(自身是所有该类的对象共有的),所以当该类实例化的对象调用该函数时,无法指向该对象自身,因此无法调用该对象的普通数据成员,只能够调用同样为全局的数据成员,且能够通过类名而不是对象来直接调用该函数。
    查看全部
  • 友元全局函数: 在友元函数声明,定义时可以传入一个类的对象实例或者对象的引用或者对象的指针 建议传入引用或者指针,速度更快 class Coordinate { friend void printXY(Coordinate &c); public: Coordinate(int x, int y); private: int m_iX, int m_iY; }; void printXY(Coordinate &c) { cout << c.m_iX << endl; //可以直接访问类的私有(保护)成员 } int main() { Coordinate coor(3, 5); printXY(coor); //这里传入了对象名而非地址 } 友元成员函数: class Coodinate {... void friend Circle::printXY(int x, int y); //printXY()函数是Circle类的一个成员函数,该函数在Circle类中定义 } clas Circle { public: void printXY(Coordinate &c) { cout << c.m_iX << endl; //可以直接访问Coordinate类的私有(保护)成员 } }; int main() { Coordinate coor(2, 5); Circle circle; circle.printXY(coor); //传入对象名 } 破坏了Coordinate类的封装性
    查看全部
    0 采集 收起 来源:[C++]友元函数

    2018-03-22

  • 一元运算符重载: -(负号)的重载 ++符号的重载
    查看全部
  • 运算符重载 概念:给原有运算符赋予新功能。 本质:函数重载 关键字:operator
    查看全部
  • static注意事项: 1.静态数据成员不依赖构造函数初始化,必须在类外单独初始化(因为它不是随着对象的产生而产生(即不是依赖构造函数初始化),而是随着类的产生而产生(即类产生后未实例化对象时它在内存中已经存在),而此时对象还未产生所以不依赖构造函数) //普通的数据成员和成员函数依赖于对象(即依赖构造函数初始化),创建对象后才存在 2.静态成员函数不能调用非静态成员函数和非静态数据成员 反之非静态成员函数能调用静态成员函数和静态数据成员及非静态的方法和属性(因为静态的成员函数不隐含this指针,无法知道去找哪个对象) 3.静态成员函数的声明和定义,声明的时候有static 关键字,定义时没有该关键字;静态数据成员前面也加关键字static 4.静态数据成员只有一份,且不依赖对象而存在(因为用sizeof求对象大小时不包含静态数据成员) 5.访问静态数据成员及静态成员函数时用类名Tank::getCount(),此时是初始化的值;用实例化对象t访问静态数据成员及成员函数时t.getCount(); 静态成员函数不能修饰为const,const的本质是对非静态成员函数隐含的this指针指向的值加以修饰。而静态成员函数不隐含this指针。
    查看全部

举报

0/150
提交
取消
课程须知
学习本课程需要有一定的C语言和C++语言基础。如基础不太扎实的同学可以,参与C++远征攻略的学习计划,友情链接 http://www.imooc.com/course/programdetail/pid/42
老师告诉你能学到什么?
1、友元函数及友元类的定义及使用方法 2、静态数据成员和静态成员函数的定义及使用方法 3、运算符重载的技巧 4、函数模板和类模板的定义及使用方法 5、标准模板库的使用方法及基本原理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!