关于最近自己接触到的几个知识点
来源:互联网 发布:淘宝企业店铺客服电话 编辑:程序博客网 时间:2024/05/22 03:18
其实一直没有系统的学习过c++,就开始撸代码了。正好公司另外一位原来纯c的小伙伴想学习c++,共同学习吧,把这两天学到的东西巩固下。
友元
其实说实话在前天我都不知道还有这个东西。百度了一下:
友元函数是能够访问类中的私有成员的非成员函数。友元函数从语法上看,它与普通函数一样,即在定义上和调用上与普通函数一样。
友元关系不具对称性。即 A 是 B 的友元,但 B 不一定是 A 的友元。 友元关系不具传递性。即 B 是 A 的友元,C 是 B 的友元,但是 C 不一定是 A 的友元。
作用及特点
友元提供了不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个不同函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。c++中的友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。
友元的正确使用能提高程序的运行效率,但同时也破坏了类的封装性和数据的隐藏性,导致程序可维护性变差。
这是在百度百科上面的解释。
#include<iostream>#include<cmath>using namespace std;class Point{public: Point(double xx, double yy) { x = xx; y = yy; }; void Getxy(); friend double Distance(Point &a, Point &b);private: double x, y;};void Point::Getxy(){ cout << "(" << x << "," << y << ")" << endl;}double Distance(Point &a, Point &b){ double dx = a.x - b.x; double dy = a.y - b.y; return sqrt(dx*dx + dy*dy);}int main(void){ Point p1(3.0, 4.0), p2(6.0, 8.0); p1.Getxy(); p2.Getxy(); double d = Distance(p1, p2); cout << "Distance is" << d << endl; return 0;}
这是百度上面的例子。
我自己的理解是这样的:友元可以直接访问某个对象的私有的成员。(等于是开启了上帝模式?),在类之外还开辟了一条路,但是又不像public那么开放,谁都可以进行读写。自觉这个特性比较尴尬。
这是过了几天更新的,真是打自己脸
正好用到了友元,所以来更新一发,一般程序的一些比较重要的变量都会读出来提供给全局,但是前段时间因为类之间的权限的问题跟软件开发的便捷的问题上我犯起了纠结,一开始的方案想的是
声明一个静态类,变量全部放在public里面的话,全局都可以调用,但是全局可以修改,不合适。如果放做private再加个public的get的话,不加public的set的话,就是全局可读但是谁都不能修改。加public的set的话就跟pubilc的全局变量一样了。说的有点乱。
如果加上友元的话 就不一样了
在允许修改全局变量的地方添加友元,其他的地方只需要提供一个public的get就可以了。我先试试,这样应该就问题不大了。
买表 static 跟friend 不能一起用
auto
自动推导参数的类型。可以
auto a = 1;auto b = "string";auto c = 1.11;
自动推导类型,听起来灰常牛逼,等在项目中使用了再说。
智能指针:
unique_ptr share_ptrweak_ptr
unique_ptr :感觉这个类似于垃圾回收机制,c#中的arc之类的,自动进行释放,这个指针不能进行赋值,可以使用move函数转移给其他指针,
share_ptr:可以同时又多个指针指向某一块地址,并且开始使用引用计数。
weak_ptr:配合share_ptr使用,可以用lock函数获取到share_ptr的内容,但是不增加引用计数。
先写到这儿吧,边理解边写,加油。
如果那又有错误,有劳指教。谢谢!
- 关于最近自己接触到的几个知识点
- 最近接触到的一些模式
- 最近接触到的一些技术
- 最近接触到的一些名词。
- 最近接触到的新的名词
- 记录一下最近用到的几个知识点
- 先说说自己最近的几个项目
- 关于自己最近的状态
- 关于jfreechart的几个知识点
- 几个关于Activity的知识点
- 几个关于Service的知识点
- 关于DOM的几个知识点
- 关于ArrayList的几个知识点
- 关于最近面试的知识点的总结
- 最近做oracel移植mysql学到的几个mysql知识点()
- 记录一下最近接触到的新技能点,以后填充
- 关于Oracle Session的几个知识点
- 关于Windows8 开发的几个小知识点
- 队列的实现
- sscanf函数简介
- 选项卡
- day1
- POJ 1094 拓扑排序(dfs+删边)
- 关于最近自己接触到的几个知识点
- Android Drawable的那些事儿
- Qt使用styleSheet制作XP风格的按钮
- Linux shell 学习(四)——case
- 【转】多玩专访郭炜炜 —— 我与西山居,我与剑侠情缘
- Retrofit请求,返回response时报错
- 深度优先搜索(DFS)
- java 知识点(中)
- 什么是原语?