正在加载图片...
类和函数的设计原则(6/10) 类和函数的设计原则(/10) 避免公共的成员变量 >尽量使用传址( pass by reference) 使用函数控制成员变量的存取权限 cC++默认为传值( pass by value) 几乎没有成本,却带来很好的安全性 对复杂的自定义类型,传值的效率太低 class Integer( int computeInt(const T&)( public it getlntvalueo const 小心传回的引用指向不存在的对象! 类和函数的设计原则(8/10) 类和函数的设计原则(9/10) >如果用不到编译器缺省的成员函数,就明 分割命名空间 确的禁用它。 比如拷贝构造函数, operator= const int VERSION const double vERSION=1-0 ·防止调用者无意中用到这些功能,因为一旦你 改写了实现,就可能造成调用者程序出现问 几 const int VERSION =1 ·怎么禁用呢? 声明为 private const double vERsIoN= 1.01 类和函数的设计原则(10/10) 类和函数的设计原则cont 写一个好的头文件 隐蔽的模棱两可 ambiguity)状态 谡舂泽裔禽时重建受数,尤其对多人合作的大和序,可能 头文件 C++ Program Language).#有银计细的说明,感兴趣的同学可以 double d=1.01 public: operator A const; 为防止头文件被重复引用,使用预处理指令 indef INDEX H ass Chad: public Father, public 非 Drooma once和编译器相关,个人认为井不方便 避免对指针类 各必仲用 ifndefldef ne/and,極块内的非公玨 void t(int 头文性可以使用 Eoroomaonce Did f(string str)类和函数的设计原则(6/10) ¾ 避免公共的成员变量 z 使用函数控制成员变量的存取权限 z 几乎没有成本,却带来很好的安全性 class Integer { public: int getIntValue() const; void setIntValue(int value); private: int value; } 类和函数的设计原则(7/10) ¾ 尽量使用传址(pass by reference) z C/C++默认为传值(pass by value) z 对复杂的自定义类型,传值的效率太低。 template<class T> int computeInt(const T&) { ..... } ¾ 小心传回的引用指向不存在的对象! template<class T> T& returnValue() { T v; return v; } 类和函数的设计原则(8/10) ¾ 如果用不到编译器缺省的成员函数,就明 确的禁用它。 z 比如拷贝构造函数,operator = z 防止调用者无意中用到这些功能,因为一旦你 改写了实现,就可能造成调用者程序出现问 题! z 怎么禁用呢? • 声明为private 类和函数的设计原则(9/10) ¾ 分割命名空间 z C++ Namespace const int VERSION = 1; const double VERSION = 1.01; namespace Index { const int VERSION =1; } namespace Store { const double VERSION = 1.01 } 类和函数的设计原则(10/10) ¾ 写一个好的头文件 z 不要在头文件中定义全局变量和函数,尤其对多人合作的大程序,可能 引发在编译与链接时期的重复定义。 z 头文件中应该只有声明,不要定义 • 《The C++ Program Language》一书中有很详细的说明,感兴趣的同学可以 看看 z 为防止头文件被重复引用,使用预处理指令 #ifndef INDEX_H #define INDEX_H //头文件内容 class Index { …… #endif z #progma once和编译器相关,个人认为并不方便。 z 建议:对外的接口头文件务必使用ifndef/define/endif, 模块内的非公开 头文件可以使用#progma once 类和函数的设计原则 cont. ¾ 隐蔽的模棱两可(ambiguity)状态! z 隐式转换 z 多继承 ¾ 避免对指针类型和数值类型进行重载 void f(int x); void f(string* str); f(0); class B; class A { public: A(const B&); } claas B { public: operator A() const; } void f(const A&); B b; f(b); void f(int) void f(char) double d = 1.01 f(d); f( (int)d ); //ok! class Child: public Father, public Mother Child d; d.Talk(); d.Father::Talk(); //ok!
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有