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

索引

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函数,才会有对象先被初始化;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jxiepc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值