C++ | 【06 杂项】More Effective C++

C++ | 【06 杂项】More Effective C++,第1张

文章目录
  • 索引
    • 33、在未来时态下开发程序
    • 34、将非尾端类设计为抽象类
    • 35、如何在同一程序中混合使用C++和C
        • 1、名变换
        • 2、静态初始化

索引

C++ | 【01 基础提议】More Effective C++🧡💛💚💙
C++ | 【02 运算符】More Effective C++🧡💛💚💙
C++ | 【03 异常】More Effective C++🧡💛💚💙
C++ | 【04 效率】More Effective C++🧡💛💚💙
C++ | 【05 技巧】More Effective C++🧡💛💚💙
C++ | 【06 杂项】More Effective C++🧡💛💚💙

33、在未来时态下开发程序
- 好的软件具有灵活性、健壮性、可靠性;
- 要在未来时态下开发软件,需要接受事务发生改变,现在是派生类,后续可能称为基类;
- 需要设计得易被人理解、维护、扩充;
- 用C++自身来表达设计上的约束条件,如防止、检测、修正错误,阻止堆对象、构造等根据需求;
- 尽可能封装,将实现细节为私有,使用无名的命名空间和文件内的静态对象或函数;
- 避免导致虚基类的设计,避免需要RTTI的设计;
- 禁止一条语句即导致代码重新编译、链接;
- 不能强迫客户升级系统或更改 *** 作环境;
- 提供完备的类,即使现在还不使用;
- 及那个你的接口设计得常见 *** 作并防止常见错误;
- 如果没有限制你不能通化你的代码,就通化它;
34、将非尾端类设计为抽象类
当基类和派生类之间的赋值问题,当允许基类间赋值,而阻止派生类通过基类指针进行赋值;
故将它们的共同属性抽取出,建立一个抽象类
class AbstractAnimal {
protected:
    AbstractAnimal& operator=(const AbstractAnimal& rhs);

public:
    virtual ~AbstractAnimal() = 0;
};

class Animal : public AbstractAnimal {
    Animal& operator=(const Animal& rhs);
};

class Lizard : public AbstractAnimal {
    Lizard& operator=(const Lizard& rhs);
};

class Chicken : public AbstractAnimal {
    Chicken& operator=(const Chicken& rhs);
};

如何对库中类加入一个新的抽象类

从已存在的实体类中派生出你的实体类;
试图在类库的继承树的更高吃找到一个完成了所需功能的抽象类,进行继承;
用包容你试图继承的类的方法实现你的新类;
35、如何在同一程序中混合使用C++和C 1、名变换
C++编译器给程序的每个函数换一个独一无二的名字,由于C++中有函数重载;
如果声明了一个函数,则经过编译器可能改变;
在C++编译器下,当调用C函数时,要禁止名变换;
extern "C"{
	.......
}
若在C编译器下,则不需使用extern "C"
故:
#ifdef __cplusplus 
extern "C" {
#endif 
 // ....
#ifdef __cplusplus 
}
#endif
2、静态初始化
静态初始化:于main执行前即被调用,静态的类对象、全局、命名空间中的、文件本体中的类对象构造函数;
应该用C++写main函数,才会有对象先被初始化;

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/673421.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存