多态和友元
2016-05-17 20:37
344 查看
为啥把友元和多态放在一起,因为多态里的重载正好用到友元了。
友元:
第一部分:函数的友元
第二部分:类的友元(个人感觉作用不大,因为用继承就行了,这个很麻烦,逻辑我说不明白。)
多态:
第一部分:重载
1.类的加减乘除(有两种方法,一个是operator前用类,一个是用friend)
////////////////////////////// 类
/////////////////////////////////// 友元
2.除了重载的加减乘除,经常用的重载
//////////////////////////////////// "" -> ""
定义一个类直接调用它的函数就可以,干嘛弄这个,有毛病。
///////////////////////////////////"" [] "" 这个是下标(注意[]这个符号是用来访问的,不是新建的)。
第二部分:虚函数
看书上看了半天,本以为是高大上,结果竟然是继承的重写(进我博客的继承里看),哎呦,这群编书的。
第三部分:抽象函数
不会,用到再说。
友元:
第一部分:函数的友元
#include <iostream> using namespace std; class A { public: A() { a=1; } friend A show(A &x) //要注意的点在于friend不是用来定义函数类型的,依旧得写void。<span style="white-space:pre"> </span>其次要注意加上&这个符号。 { cout<<x.a<<endl; } private: int a; }; int main() { A a; show(a);<span style="white-space:pre"> </span>//友元可以直接当作函数调用,但是括号里面要写类。 }
第二部分:类的友元(个人感觉作用不大,因为用继承就行了,这个很麻烦,逻辑我说不明白。)
#include <iostream> using namespace std; class A { public: A() { a=1; } friend class B; private: int a; }; class B { public: void show(A &x) { cout<<x.a<<endl; } }; int main() { A a; B b; b.show(a); }
多态:
第一部分:重载
1.类的加减乘除(有两种方法,一个是operator前用类,一个是用friend)
////////////////////////////// 类
#include <iostream> using namespace std; class A { public: A(int x) { a=x; } A operator+(A x) //加法就是这么写的,括号里只有一个(这里代表b)。 { return A(a+x.a); } void show() { cout<<a<<endl; } private: int a; }; int main() { A a(10),b(20); a=a+b; a.show(); return 0; }
/////////////////////////////////// 友元
#include <iostream> using namespace std; class A { public: A(int x) { a=x; } friend A operator+(A x,A y) //加法就是这么写的(书上在x和y前加&但是我看不懂啥意思,去掉并不影响),注意括号里变成了两个,前面加了friend。 { return A(x.a+y.a); } void show() { cout<<a<<endl; } private: int a; }; int main() { A a(10),b(20); a=a+b; a.show(); return 0; }
2.除了重载的加减乘除,经常用的重载
//////////////////////////////////// "" -> ""
定义一个类直接调用它的函数就可以,干嘛弄这个,有毛病。
///////////////////////////////////"" [] "" 这个是下标(注意[]这个符号是用来访问的,不是新建的)。
#include<iostream> #include<string.h> using namespace std; class A { public: A(char* x) { num=strlen(x); t=new char[num+1]; strcpy(t,x); } char operator[](int x) { return t[x]; } private: int num; char *t; }; int main() { A z("abcdefg"); cout<<z[2]<<endl; return 0; }
第二部分:虚函数
看书上看了半天,本以为是高大上,结果竟然是继承的重写(进我博客的继承里看),哎呦,这群编书的。
第三部分:抽象函数
不会,用到再说。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#中的多态深入理解
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结