Effective C++ 条款23
宁non-member、non-friend顶替member性能
本节介绍笔者为什么时间来实现某些功能。择非成员函数而且是非友元函数。这样做总结一句话,就是最大限度的实现类的封装性。
封装意味着不可见。
愈多东西被封装。欲少人能够看到它,我们就有愈大的弹性去改变它。愈少代码能够看到数据(訪问数据),愈多数据可被封装,我们就更有自由来改变对象数据。愈多函数能够訪问它,数据的封装性就愈低。
我们知道在上一节声明private数据成员也是为了实现类的封装。可见封装对于一个健壮的类来说的重要性。
以上就是作者知识核心。
为了实现封装,作者引入了namespace技术,这样的技术倒是挺有意思。
例如以下代码
**// S.h**
#include<iostream>
namespace myclass
{
class S
{
public:
S(int n):value(n){}
void set(int v)
{
value=v;
}
void get()
{
std::cout<<value;
}
void prit()
{
std::cout<<"****";
}
private:
int value;
};
}
**//S1.h**
#include"S.h"
namespace myclass
{
void p1(S s)
{
s.get();
}
}
**//main.cpp**
#include"S1.h"
int main()
{
myclass::S s(10);
myclass::p1(s);
}
版权声明:本文博主原创文章。博客,未经同意不得转载。
Effective C++ 条款23的更多相关文章
- Effective C++ -----条款23:宁以non-member、non-friend替换member函数
宁可拿non-member non-friend函数替换member函数.这样做可以增加封装性.包裹弹性(packaging flexibility)和机能扩充性.
- effective c++ 条款23 perfer nonmember nonfreind function to member function
主要的理由还是封装.nonmember nonfreind function 不能访问类private 成员变量. 这个场景是有一个类提供了一些基本功能,比如 class WebBrowser { p ...
- [More Effective C++]条款22有关返回值优化的验证结果
(这里的验证结果是针对返回值优化的,其实和条款22本身所说的,考虑以操作符复合形式(op=)取代其独身形式(op),关系不大.书生注) 在[More Effective C++]条款22的最后,在返回 ...
- More Effective C++ 条款0,1
More Effective C++ 条款0,1 条款0 关于编译器 不同的编译器支持C++的特性能力不同.有些编译器不支持bool类型,此时可用 enum bool{false, true};枚举类 ...
- Effective C++:条款23:宁以non-member、non-friend替换member函数
(一) 有个class来表示网页浏览器: class WebBrowser { public: void clearChache(); void clearHistory(); void remove ...
- Effective C++ 条款08:别让异常逃离析构函数
1.别让异常逃离析构函数的原因 <Effective C++>第三版中条款08建议不要在析构函数中抛出异常,原因是C++异常机制不能同时处理两个或两个以上的异常.多个异常同时存在的情况下, ...
- Effective C++ -----条款28:避免返回handles指向对象内部成分
避免返回handles(包括reference.指针.迭代器)指向对象内部.遵守这个条款可增加封装性,帮助const成员函数的行为像个const,并将发生“虚吊号码牌”(dangling handle ...
- Effective C++ -----条款21:必须返回对象时,别妄想返回其reference
绝不要返回pointer或reference指向一个local stack对象,或返回reference指向一个heap-allocated对象,或返回pointer或reference指向一个loc ...
- Effective C++ -----条款19:设计class犹如设计type
Class的设计就是type的设计.在定义一个新type之前,请确定你已经考虑过本条款覆盖的所有讨论主题. 新type的对象应该如何被创建和销毁? 对象的初始化和对象的赋值该有什么样的区别? 新typ ...
随机推荐
- iOS_03_关键字、标识符、注释
一.学习语法之前的提醒 1. C语言属于一门高级语言,其实,所有高级语言的基本语法组成部分都一样,只是表现形式不太一样. 2. 就好像亚洲人和非洲人,大家都有人类的结构:两只手.两只脚.一个头,只是他 ...
- (转)windows 下 Java 及 Python 环境变量设置
转自:http://www.cnblogs.com/zhj5chengfeng/archive/2013/01/01/2841253.html http://www.cnblogs.com/qiyes ...
- 微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io
原文:微服务实践(七):从单体式架构迁移到微服务架构 - DockOne.io [编者的话]这是用微服务开发应用系列博客的第七篇也是最后一篇.第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点: ...
- GO语言学习(三)GO语言学习API文档
一:GoLang标准库API文档 https://studygolang.com/pkgdoc
- Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警
Oracle 12CR2 中alert.log出现大量的 WARNING: too many parse errors 告警 日志如下: 2018-06-24T17:16:21.024586+08 ...
- 每日技术总结:flex,选项卡,classList,
1.Flex布局子元素垂直居中 给父元素添加以下样式: .parent { display: flex; align-items: center; } 2.js面向对象的选项卡 见另一篇文章 js面向 ...
- P2P平台公司的9种职位
1.技术 开发类:开发系统,实现新功能 维护类:服务器和网站维护 更多:Web前端等 观点:技术岗位很关键,但是很多不懂技术的老板,不会认可你的价值. 太多的老板,以为技术 ...
- [React] Create an Auto Resizing Virtualized List with react-virtualized
In this lesson we'll show how to use the AutoSizer component from react-virtualized to automatically ...
- BestCoder Round #11 (Div. 2) 前三题题解
题目链接: huangjing hdu5054 Alice and Bob 思路: 就是(x,y)在两个參考系中的表示演全然一样.那么仅仅可能在这个矩形的中点.. 题目: Alice and Bob ...
- 原生js螺旋运动
window.onload=function(){ var oSpiral=document.getElementById('spiral'); var oUl=oSpiral.getElements ...