教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
  网站导航: 库库中文网 · 系统编程教程 · C#语言 · C#综合文章  

C++地类与C#地类(1)

教程推荐
『C++地类与C#地类(1)』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2006-12-14 21:11:00 

一、简介

面向对象(OO)编程在应用设计中已经发展二十来年了。程序不再是一系列函数的堆彻(象一些范例那样的程序),而是对象的集合,每个对象都有其独特的属性和方法来与其它对象打交道。   

"C"语言系列是面向对象设计发展的最好例子。C++为开发者提供了优秀的面向对象编程工具,程序员可以显式地创建构造函数,拷贝构造函数,重载操作符,使用模板等等。   

象C++这样复杂语言的主要问题是程序员要花上好几个月来掌握面向对象设计本质。新程序员必须学会掌握模板,函数重载,当然还要会创建和使用功能良好的类。   

微软公司给C#(读为C-Sharp)赋予C++某些面向对象的本质,比如模板,但改变了类的创建方法。本文,我将对比C++和C#的类,并着重说明微软在C#中类创建和使用方面的改变。 

本文对象是熟练的C++程序员,通过一些细节来解释C#面向对象的本质。

二、C#的类有了哪些改变?

如你所知,C#是部分基于C++,部分基于Java语法的语言。C#中还有一些细节上的改变,使得它可以用于现代设计。当你开始用C#建类时就会立即看到这点。让我们通过一个简单的例子开始了解在C++和C#中是如何建类并进行实例化的。



C++版本:

#include 

class MyClass

{

 public: void doSomething()

 { std::cout << "This is some text";

 }

};    

void main()

{ MyClass mc;

 mc.doSomething();





C# 版本:

using System;



class MyClass

{

public void doSomething()

{

Console.WriteLine("This is some text");

}

}    

class EntryPoint

{  public static void Main()

{ MyClass mc = new MyClass();

mc.doSomething();

}

}   

上面的代码中有几个不同之处。

首先,C++用#include包含语句来指明包含文件iostream.h的物理路径。C#则告诉编译器程序将在System命名空间下操作,所有的命名空间和类都属于System命名空间。C#通过命名空间的名字来决定程序的作用范围(本例中只有System一个命名空间),而不用指明物理路径的包含文件方法。

其次,C#的主程序用Main(注意M是大写)。

第三,C++的类声明结束后要在最后的大括号后面用分号结尾。C#则可用可不用,往往都是省略。

第四,你能看到在C#中必须显式地声明方法和成员的作用域。若不加声明,缺省为私有(只有类成员可以访问),这点与C++一样。C#中有5种作用域:

 公有(public):其他类成员也可以访问

 私有(private):只有类成员才能访问

 保护(protected):类成员和继承类成员可以访问

 内部(internal):只有汇编里的成员才能访问(C#的汇编是代码和资源数据的结合,以asmx作文件后缀)

 内部保护(protected internal):类成员和继承类成员可以访问

最后,与Java一样,C#的方法也可以声明为静态(static)的。静态变量的使用在C#和C++是一样的。在C#里,可以这样创建并调用类的静态方法:

using System; 

class MyClass

{ public static void doSomething()

 {Console.WriteLine("This is some text");

 }

};



class EntryPoint

{

 public static void Main()

 {

MyClass.doSomething();

 }   } 



注意,这里直接使用类声明而没有创建类的实例。这是为C#语言增加的非常便利的使用方法,可以节省我们的时间和内存。就是说,不要创建类实例,可以直接调用类的方法。 

   

三、用类修饰语限制对类的访问

以前只能对类成员和类方法设定限制,但不能对类实体作限制。C#可以通过声明类修饰语来对类的实例实行限制,如上节提到的作用域。



C++不能对整个类作限制。看一下C++的类声明:

class Car

{

 public:

Car();

Car(Car &c);

virtual ~Car(); 

 private:

int numCars;

Car* previous;

Car* next;

}; 



这里有二种访问类型:公有(public)和私有(private)。继承或将类Car实例化后,程序只能继承这些代码,不能作其它变动,如果要作其它变动就不能将其作为基类。    

C#对此了改变。可以附加访问修饰语来限制类成员和方法以及类实例的访问权。C#设定8个访问权限:

 公有(public):可以被所有其它的类访问。没有其它限制修饰语,它的公有性质就一直是缺省的。

 私有(private):只有类成员才能访问。

 保护(protected):类成员和继承类成员可以访问。

 内部(internal):只有汇编里的成员才能访问(C#的汇编是代码和资源数据的结合,以asmx作文件后缀)。

 内部保护(protected internal):类成员和继承类成员可以访问。

 密封(sealed):所有继承类都不能访问。无论直接或间接地将它作为基类,C#编译器都会跳错。

 抽象(abstract):与C++的虚(virtual)类或虚方法相似,抽象类不能直接实例化,抽象函数含有函数名。但在作为基类或继承类时可以使用。

 新建(new):用new创建嵌套类,可以隐藏继承方式,告诉编译器创建一个类的新版本。

 

举例来说,如果要创建一个类,并且这个类不能被作为基类或继承,那么就要创建一个密封类:

sealed class Car

{

 public void paintCar()

 {

// Code to paint car goes here

 }





这时如果要创建一个继承类RedCar:

internal class RedCar : Car

{

 // Won't work.





C#编译器就会跳错:

error CS0509: 'RedCar' : cannot inherit from sealed class 'Car' (不能从密封类'Car'继承)。 




[1] [2] 下一页

】【关闭窗口
  上一页:
  下一页:
 ·网站导航: 库库中文网 · 系统编程教程 · C#语言 · C#综合文章
C#综合文章:相关文章
C#综合文章点击榜
普通教程C++地类与C#地类(1)
普通教程C#.net常用函数和办法集
普通教程用Visual C#设计仿MSN Messager
普通教程由C++转向C#需要注意地疑难(1)
普通教程C# .Net里面地类型转换(1)
普通教程C++编制程序人员容易犯地10个C#
普通教程通过Visual C#.NET建一个DTS任务
普通教程C#中地特性(Attributes)
普通教程运用C#完成标准地Dispose模式
普通教程《Effective C# 精髓》摘选
PHOTOSHOP - 基础教程 抠图专题 蒙版专题 3DsMax 基础 设计实例 Maya设计实例
3D设计教程
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright ? 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL. 电脑硬件 电脑知识 教程学习
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光