拉成员上移重构允许您将类成员移动到基类。

推成员下移重构可帮助您通过将类成员移动到子类来清理类层次结构。然后这些成员仅会被移动到直接的子类中。

拉成员上移

  1. 选择要移动到超类的成员。
  2. 在主菜单或上下文菜单中,选择重构 | 拉成员上移。拉成员上移对话框会出现。
  3. 选择目标对象(超类)。
  4. 在成员部分中,选择要移动的成员。
  5. 单击“重构”以将选定的成员拉到目标位置。

示例

C++

之前之后
class BaseClass { int d1 = 0; static const int d2 = 1; void exFunc(int); //This method will be pushed down }; class ChildClass: public BaseClass { char SomeChar = 'a'; long d22; }; void BaseClass::exFunc(int) {};class BaseClass { int d1 = 0; }; class ChildClass: public BaseClass { char SomeChar = 'a'; long d22; static const int d2 = 1; void exFunc(int); }; void ChildClass::exFunc(int) {};

Objective-C/C++

之前之后
@interface SampleClass:NSObject /* This method will be pulled up */ - (int)IntSum:(int)num1 andNum2:(int)num2; @end @implementation SampleClass - (int)IntSum:(int)num1 andNum2:(int)num2 { int result = num1 = num2; return result; } @end@interface BaseClass : NSObject - (int)IntSum:(int)num1 andNum2:(int)num2; @end @interface SampleClass : BaseClass @end @implementation BaseClass - (int)IntSum:(int)num1 andNum2:(int)num2 { int result = num1 = num2; return result; } @end

Python

之前之后
class SuperClass: def super_method(self): pass class SubClassOne(SuperClass): # This function will be pulled up def my_method(self): passclass SuperClass: def super_method(self): pass def my_method(self): pass class SubClassOne(SuperClass): pass

上移依赖成员

让我们考虑以下C++代码示例:

class BaseClass {
    int a = 0;
};

class ChildClass : BaseClass {
    int b1 = 12;
    int b2 = b1 * 4;
};

正如您所见,变量b2在这里取决于变量b1。如果您对ChildClass类应用拉成员上移重构,并尝试选择要移动的b2,并保留b1在类中,CLion会在拉成员上移对话框中突出显示有问题的成员,如下所示:

1.png

尝试继续进行重构,您将收到以下警告消息:

2.png

选择“Continue”以忽略问题并继续进行重构,或选择“Cancel”以返回并解决问题。您还可以在Find工具窗口中观察到冲突。

推成员下移

  1. 在编辑器中,打开需要下移成员的类。
  2. 在主菜单或上下文菜单中,选择重构 | 推成员下移。推成员下移对话框会显示要下移的成员列表。
  3. 在“要下移的成员”区域中,选择要移动的成员。请注意,插入符号处的成员已被选中。
    如果下移成员可能会导致问题,您将看到红色的突出显示。这意味着,如果不处理这种情况,重构后会出现错误。CLion会在“检测到问题”对话框中提示您,您可以选择忽略或修复问题。
  4. 预览并应用更改。

示例

C++

之前之后
class BaseClass {<br/> int d1 = 0;<br/> static const int d2 = 1;<br/> void exFunc(int); //This method will be pushed down<br/>};<br/><br/>class ChildClass: public BaseClass {<br/> char SomeChar = 'a';<br/> long d22;<br/>};<br/><br/>void BaseClass::exFunc(int) {};class BaseClass {<br/> int d1 = 0;<br/>};<br/><br/>class ChildClass: public BaseClass {<br/> char SomeChar = 'a';<br/> long d22;<br/> static const int d2 = 1;<br/> void exFunc(int);<br/>};<br/><br/>void ChildClass::exFunc(int) {};

Objective-C/C++

之前之后
@interface Superclass : NSObject {<br/> int v;<br/> int w; //This variable will be pushed down<br/>}<br/>- (void)initV;<br/>@end<br/><br/>@implementation Superclass<br/>- (void)initV {<br/> v = 20;<br/>}<br/>@end<br/><br/>@interface Subclass : Superclass@interface Superclass : NSObject {<br/> int v;<br/>}<br/>- (void)initV;<br/>@end<br/><br/>@implementation Superclass<br/>- (void)initV {<br/> v = 20;<br/>}<br/>@end<br/><br/>@interface Subclass : Superclass { int w; }

Python

之前之后
class SuperClass:<br/> # This function will be pushed down<br/> def super_method(self):<br/> pass<br/><br/>class SubClassOne(SuperClass):<br/> def my_method(self):<br/> pass<br/><br/>class SubClassTwo(SuperClass):<br/> def my_method(self):<br/> passclass SuperClass:<br/>pass<br/><br/>class SubClassOne(SuperClass):<br/> def my_method(self):<br/> pass<br/><br/>def super_method(self):<br/> pass<br/><br/>class SubClassTwo(SuperClass):<br/> def my_method(self):<br/> pass<br/><br/>def super_method(self):<br/> pass

下移依赖成员

让我们考虑以下C++代码示例:

class SuperClass {
    int b1 = 12;
    int b2 = b1 * 4;
};

class ChildClass : SuperClass {
    int b3 = 11;
};

正如您所见,变量b2在这里取决于变量b1。如果您对上述类应用推成员下移重构,并尝试选择要移动的b1,并保留b2在基类中,CLion会在推成员下移对话框中突出显示有问题的成员,如下所示:

3.png

尝试继续进行重构,您将收到以下警告消息:

4.png

选择“Continue”以忽略问题并继续进行重构,或选择“Cancel”以返回并解决问题。您还可以在Find工具窗口中观察到冲突。

标签: clion破解, clion破解教程, clion教程, clion基础教程, clion高级教程, clion核心教程, clion免费激活码, clion免费注册码, clion注册码在线生成, clion激活