CLion教程-提取超类
提取超类重构允许将类的某些成员提取到一个超类中。在CLion中,此重构适用于C++、Objective-C/C++、Python和JavaScript代码。
示例
C++
之前 | 之后 |
---|---|
class SomeClass { char SomeChar = 'a'; long d22; //This function will be extracted to a base class void exFunc(int); }; | class SuperClass { void exFunc(int); }; class SomeClass : public SuperClass { char SomeChar = 'a'; long d22; }; |
Objective-C/C++
之前 | 之后 |
---|---|
@interface SClass : NSObject { int v; //This variable will be extracted to a superclass } - (void)initV; @end @implementation SClass - (void)initV { v = 20; } @end | @interface SuperClass : NSObject { int v; } @end @interface SClass : SuperClass - (void)initV; @end @implementation SClass - (void)initV { v = 20; } @end |
Python
之前 | 之后 |
---|---|
class BaseClass: # This function will be extracted to a base class def eval_smth(self, a, b, c): x = 2*b - c y = 2*b + c return x, y | class SuperClass: def eval_smth(self, a, b, c): x = 2*b - c y = 2*b + c return x, y class BaseClass(SuperClass): pass |
JavaScript
之前 | 之后 |
---|---|
class Editor { //This function will be extracted to a superclass View() { console.log(this.name + ' can view'); } Edit() { console.log(this.name + ' can edit'); } } | class User { View() { console.log(this.name + ' can view'); } } class Editor extends User { Edit() { console.log(this.name + ' can edit'); } } |
提取超类
- 在一个视图中选择所需的类,或者仅在编辑器中打开它。
- 从主菜单中选择 Refactor | Extract/Introduce | Superclass,或从上下文菜单中选择 Refactor | Extract Superclass。
在出现的“提取超类”对话框中,指定以下信息:
- 在“从类中提取超类”字段中,指定新超类的名称。
- 要包含在超类中的成员
“从类中提取超类”字段显示应该提取超类的类的名称。它是只读的。
- 单击“重构”以继续重构。超类将被创建,原始类将被修改为继承它:
提取类相关成员
我们来看一下以下代码示例:
int d1;
class XClass {
static const int d2 = 13;
int exRes = d2 * d1;
};
正如您所见,d1
和 exRes
之间存在依赖关系。如果您将上述类应用于提取超类重构,并尝试选择要移动的 exRes
,CLion会用蓝色突出显示 d2
变量:
尝试继续提取,您将收到以下警告消息:
选择“继续”以忽略问题并继续重构,或选择“取消”以返回并解决问题。您还可以在查找工具窗口中查看冲突。