`
kmplayer
  • 浏览: 496454 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

条款30:避免写出member function,传回一个non-const function或reference并指向private或protect成员

 
阅读更多
1,先看一个例子:
class Address { ... };           // where someone lives

class Person
{
public:
  Address& personAddress() { return address; }
private:
  Address address;
};

Person scott();            
Address& addr = scott.personAddress(); //addr看作一个全局对象
这个时候addr乘了scott.address的另一个名称,可以通过addr任意读写address.
因此,scott.addres不再是private,变成了public.

2,相同的道理,适用于指针成员.
例如:
class Person
{
public:
  Address * personAddress() { return &address; }
private:
  Address address;
};

Address *addrPtr = scott.personAddress();  // same problem as above
改写*addrPtr,即可改变address的值.

3,也适用于成员函数.
如:
class Person;                   // forward declaration
typedef void (Person::*PPMF)();

class Person
{
public:
static PPMF verificationFunction()
{
return &Person::verifyAddress;
}

private:
Address address;
void verifyAddress();
};

下面这个动作:
PPMF pmf = scott.verificationFunction();
(scott.*pmf)(); //等同于调用scott.verificationFunction.
分享到:
评论

相关推荐

    Effective C++(第三版)

    条款25:考虑写出一个不抛异常的swap函数 consider support for a non-throwing swap. 5. 实现 implementations 条款26:尽可能延后变量定义式的出现时间 postpone variable definitions as long as possible. 条款...

    条款20: 宁以pass-by-reference-to-const 替换 pass-by-value

    1、为什么要宁以pass-by-reference-to-const 替换 pass-by-value 效率方面 缺省情况下,C++以by value 方式传递对象至(或来自)函数。 除非你另外指定,否则函数参数都是以实际实参的副本为初值,而调用段所获得的...

    Effective C++ 中文版

    条款25:考虑写出一个不抛异常的swap函数 5.实现 条款26:尽可能延后变量定义式的出现时间 条款27:尽量少做转型动作 条款28:避免返回handles指向对象内部成分 条款29:为“异常安全”而努力是值得的 条款30...

    Effective.C++.中文第二版.50条款doc文档.chm

    条款30: 避免这样的成员函数:其返回值是指向成员的非const指针或引用,但成员的访问级比这个函数要低 条款31: 千万不要返回局部对象的引用,也不要返回函数内部用new初始化的指针的引 条款32: 尽可能地推迟变量的...

    Effective C++

    条款30:避免这样的成员函数,其返回值是指向成员的非CONST指针或引用 条款31:千万不要返回局部对象的引用,也不要返回函数内部用NEW初始化的指针 条款32:尽可能推迟变量的定义 条款33:明智的使用INLINE 条款34:将...

    应用Dephi 开发佳能照相机API

    This function delete all the reference or list objects that user has forgotten to delete. Parameters: In: None Out: None Returns: Returns EDS_ERR_OK if successful. In other cases, see ...

    开源项目-sdboyer-constext.zip

    开源项目-sdboyer-constext.zip,constext: Cons() your contexts

    effective stl 中文 pdf

    条款30: 确保目的范围足够大 条款31: 了解你的排序选项 条款32: 如果你真的想删除东西的话在remove-like的算法后紧接上erase 条款33: 当心在包含指针的容器使用remove-like的算法 条款34: 注意哪些算法需要排序...

    effective stl stl 技巧

    条款29:需要一个一个字符输入时考虑使用istreambuf_iterator 算法 条款30:确保目标区间足够大 条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在...

    Effictive STL CHM中文版

    条款30: 确保目的范围足够大 条款31: 了解你的排序选项 条款32: 如果你真的想删除东西的话在remove-like的算法后紧接上erase 条款33: 当心在包含指针的容器使用remove-like的算法 条款34: 注意哪些算法需要排序...

    VBA API 32 Serialport MT-SICS

    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long ' ' Creates or opens a communications resource and returns a handle ' that can be used to access the resource. ' ...

    徐彤教程-C++编程const与static第0263讲:实例03-const成员函数

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    徐彤教程-C++编程const与static第0262讲:实例03-const成员变量

    徐彤老师耗时三年倾心制作,专业录制,通俗,细致的讲解了C++ 编程从入门到高级

    if-const:javascript条件词中的新词!

    或您喜欢的任何其他方式。 用法 工作与正常的任何类型的条件if作品有。 允许在代码块中使用条件的结果(类似于C# out var语法)。 import ifConst from 'if-const' ; // a little function to simulate ...

    PC-Lint9.0 最新版本,已经安装使用了

    .\XXXX.cpp(27): error 1720: (Info -- assignment operator for class 'Object' has non-const parameter) void * operator new(size_t size, int i=0) {return 0;} // ECPP Items 8,9,10 .\XXXX.cpp(31): error ...

    HTTP-Status-Const:HTTP-Status-Const 的只读发布历史

    这意味着常量可用于需要内插变量的上下文中,例如哈希键或字符串。 我真的需要这个吗? 不。你已经可以使用一些难看的语法获得内插常量: my %handlers = ( HTTP_OK() => sub { ... }, ); 或者 "Status code ...

    Effective STL(中文)

    需要一个一个字符输入时考虑使用istreambuf_iterator 算法 条款30:确保目标区间足够大 条款31:了解你的排序选择 条款32:如果你真的想删除东西的话就在类似remove的算法后接上erase 条款33:提防在...

    Delphi_3_recive_send_batch_simple_sms_

    function SendSimpleSMS(const usernamepassword:string;to_: ArrayOfString;fromtext: string; const isflash: Boolean): ArrayOfString;function SendSimpleSMS2(const usernamepasswordto_fromtext:string;is...

    const用法 const int *a; int * const a;

    表示pch是一个字符串常指针,该指针只能指向该字符串,不可以在让他指向另一字符串。但该字符串的内容可以变化。 const int a; //a是个整型常量 int const a; //同上 const int *a; //a是一个指向整型常量的...

    C++大学教程

    1.15 简单程序:打印一行文本-------------------------------------------12 1.16 简单程序:两个整数相加-------------------------------------------15 1.17 内存的概念----------------------------------...

Global site tag (gtag.js) - Google Analytics