WEB开发网
开发学院软件开发VC SetForegroundWindow 及类保护 阅读

SetForegroundWindow 及类保护

 2006-07-20 11:43:51 来源:WEB开发网   
核心提示: Asha Udupa在C#中,有一个关键字正好是你想要的: sealed,当你的C#类被限定为 sealed 类型,SetForegroundWindow 及类保护(4),相当于你告诉编译器无人能从这个类派生其它类, 例如, sealed class MyClass { ... }意思是说

Asha Udupa

在C#中,有一个关键字正好是你想要的: sealed。当你的C#类被限定为 sealed 类型,相当于你告诉编译器无人能从这个类派生其它类。 例如, sealed class MyClass { ... }  意思是说没有人能从 MyClass 派生出别的类。在.NET Framework中许多(一些人说太多)类自身是密封的。

但你的问题的是 C++,而不是C#。啊哈,C++中可没有 sealed 这个关键字(至少现在还没有——我得到消息它不久将被加入到官方标准中)。但有一个相当简单的方法完成同一个目的 。只要你把构造函数申明为 private 即可: class MyClass {
private:
 MyClass() { ... }
 MyClass(int arg) { ... }
};
  这样便没有办法从 MyClass 派生新类。因为没法实例化它。等一等——如果没法实例化你的类。那别人如何使用它呢?问得好。答案是你必须添加静态函数 来创建类的实例。 class MyClass {
public:
 static MyClass* CreateInstance() {
  return new MyClass();
 }
private:
 MyClass() { }
};
  现在任何人可以调用 MyClass::CreateInstance 来创建你的类的实例,但没有人能从它派生。这种方法在大多情况下工作得很好,可它有一个 缺点:你很难在堆栈中创建 MyClass 实例。要解决这个问题,你需要一个稍微复杂的解决方案: class MakeSealed {
private:
  MakeSealed () { }
  friend class MyClass;
};
class MyClass : virtual MakeSealed { };
  现在除了 MakeSealed 的友元类 MyClass 以外,无人能创建 MakeSealed 实例。你能在堆栈中创建 MyClass 的实例 ,但你不能从MyClass 派生。你可以使用 MakeSealed 来使其它成为密封类,但同时必须添加它们为友元。MyClass 以 MakeSealed 为虚拟基类 ,以便于你在使用多重继承时不会出现问题。相当聪明,不是们吗?编程快乐!

上一页  1 2 3 4 

Tags:SetForegroundWindow 保护

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接