您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > C面向对象编程(类)方面
Windows应用编程主讲:陈克力第4章面向对象编程方法Windows应用编程主讲:陈克力4.1一个简单的程序4.2类和对象4.3类的继承、重载与多态4.4运算符的重载4.5接口及其实现4.6方法的委托4.7常用的几个类4.8命名空间本章内容Windows应用编程主讲:陈克力定义一个简单的类——虚数类Complex并利用该类来创建虚数对象,实现虚数类的加减运算。4.1一个简单的程序——虚数类的定义与应用Windows应用编程主讲:陈克力4.1一个简单的程序——虚数类的定义与应用classComplex//虚数类{privatedoubleRP;//实部privatedoubleIP;//虚部publicdoublegetRP(){returnRP;}publicdoublegetIP(){returnIP;}publicComplex()//构造函数{RP=IP=0;}publicComplex(doubleRP,doubleIP)//构造函数重载{this.RP=RP;this.IP=IP;}当函数参数与成员变量重名时,要通过关键字this来应用成员变量,this代表当所创建的对象。私有成员变量RP和IP,分别表示虚数的实部和虚部成员方法getRP():用于获取虚数的实部成员方法getIP():用于获取虚数的虚部不带参数的构造函数,当调用该构造函数创建虚数对象时,实部和虚部均为0构造函数Complex(doubleRP,doubleIP):对上一个构造函数来说,它是重载的构造函数,当调用该构造函数创建虚数对象时,实部和虚部的值分别由参数RP和IP来设定Windows应用编程主讲:陈克力4.1一个简单的程序——虚数类的定义与应用publicstaticComplexoperator+(Complexc1,Complexc2)//加号+重载{Complexc=newComplex(c1.RP+c2.RP,c1.IP+c2.IP);returnc;}publicstaticComplexoperator-(Complexc)//对取反符号-重载(一元运算符重载){Complexc2=newComplex(-c.RP,-c.IP);returnc2;}operator+(Complexc1,Complexc2):重载加法“+”运算符(二元运算),使得两个虚数对象可以相加operator-(Complexc):重载取反运算符号“-”(一元运算),当调用此运算符时,虚数的实部和虚部将被取反Windows应用编程主讲:陈克力4.1一个简单的程序——虚数类的定义与应用//对减号-重载(二元运算符重载)publicstaticComplexoperator-(Complexc1,Complexc2){Complexc=newComplex(c1.RP-c2.RP,c1.IP-c2.IP);returnc;}operator-(Complexc1,Complexc2):重载减法运算符号“-”(二元运算),使得两个虚数对象可以相减Windows应用编程主讲:陈克力4.1一个简单的程序——虚数类的定义与应用//实现隐式类型转换(从string到Complex)publicstaticimplicitoperatorComplex(strings){s=s.Trim().TrimEnd('i');s=s.Trim().TrimEnd('*');string[]digits=s.Split('+','-');Complexc;c=newComplex(Convert.ToDouble(digits[0]),Convert.ToDouble(digits[1]));returnc;}publicvoidputIN()//输出虚数{Console.WriteLine({0}+{1}*i,RP,IP);}}implicitoperatorComplex(strings):实现从string类型到Complex类型的隐式类型转换,使得可以对虚数对象赋一个表示虚数的字符串,如c3=100+200*i等成员方法putIN():用于从屏幕上输出一个虚数Windows应用编程主讲:陈克力4.1一个简单的程序——虚数类的定义与应用staticvoidMain(string[]args){//调用不带参数的构造函数创建虚数对象c1Complexc1=newComplex();//调用带参数的构造函数创建虚数对象c2Complexc2=newComplex(1,2);Console.Write(c1=);c1.putIN();Console.Write(c2=);c2.putIN();Complexc3;c3=“100+200*i”;//通过隐式转换对c3赋值Console.Write(c3=);c3.putIN();Complexc4;c4=c2-c1+(-c3);//对对象进行加减运算Console.Write(c4=);c4.putIN();Console.ReadLine();}Windows应用编程主讲:陈克力4.1一个简单的程序——虚数类的定义与应用此例子涉及到的知识点包括:类的定义及对象的创建和运算;公有成员和私有成员的定义方法;成员变量的定义及其运用;一般成员函数的定义及其重载;构造函数的定义及其重载;一元和二元运算重载;除此外,面向对象编程方法还涉及到类的继承、多态、析构函数等内容,下面将系统介绍面向对象编程方法的这些内容。Windows应用编程主讲:陈克力4.2类和对象类的定义格式如下:class类名{成员变量;成员方法;}[;]4.2.1类和对象的定义例如:classA{intx;//成员变量intf()//成员方法{returnx;}}Windows应用编程主讲:陈克力4.2类和对象声明对象和创建对象的语法格式分别如下:类名对象名;//声明对象对象名=new类名();//创建对象也可以在声明的同时创建对象:类名对象名=new类名();4.2.1类和对象的定义利用类A来创建对象a:Aa;a=newA();上述代码等价于:Aa=newA();Windows应用编程主讲:陈克力4.2类和对象1.对象的访问方法访问格式如下:对象名.对象成员;4.2.2对象的访问方法及访问控制例如,先定义类B:classB{publicintx;publicintf(){returnx+100;}}利用类B来声明并创建对象b:Bb=newB();访问b中的成员:b.x=100;inty=b.f();Console.WriteLine(y={0},y);结果输出:y=200Windows应用编程主讲:陈克力4.2类和对象2.成员的访问控制4.2.2对象的访问方法及访问控制访问控制是通过在类成员前冠以修饰符来实现:private:用这种修饰符修饰的成员称为私有成员。私有成员只能被该类中的其他成员访问,其他类(包括派生类)中的成员是不允许直接访问的。C#中private是默认的修饰符。public:用这种修饰符修饰的成员称为公有成员。公有成员允许该类和其他类中的所有成员访问。protected:用这种修饰符修饰的成员称为保护成员。保护成员可以被该类和其派生类中的成员访问,而其他类中的成员则不允许访问。internal:用这种修饰符修饰的成员称为内部成员。内部成员只能被程序集内的类的成员访问,而程序集外的类(包括派生类)的成员是不允许访问的。protectedinternal:用该修饰符修饰的成员只能被程序集内的类的成员及这些类的派生类中的成员所访问。Windows应用编程主讲:陈克力4.2类和对象2.成员的访问控制4.2.2对象的访问方法及访问控制概念注释:何为程序集?程序集是作为一个单元进行版本控制和部署的一个或多个文件的集合,它是.NETFramework编程的基本组成部分。详细解释程序集的内涵已经超出了本书的内容,读者可以简单地这样理解:程序集就是.NET项目在编译后生成的.exe或.dll文件(一种中间代码文件),针对一个.exe或.dll,其他.exe或.dll中的类和成员就是程序集外的类和成员。Windows应用编程主讲:陈克力4.2类和对象2.成员的访问控制4.2.2对象的访问方法及访问控制成员访问控制的例子://首先定义类A,然后定义类B,它继承类AclassA//类A{privateintx;//私有成员protectedinty;//保护成员publicintz;//公有成员voidf(){x=1;//正确,允许访问本类中的私有成员y=2;//正确,允许访问本类中的保护成员z=3;//正确,允许访问本类中的公有成员}}classB:A//类B,它继承类A{voidg(){base.x=100;//错误,不允许访问基类中的私有成员base.y=200;//正确,允许访问基类中的保护成员base.z=300;//正确,允许访问基类中的公有成员}}//在Main函数中实例化类A,并调用相关成员staticvoidMain(string[]args){Aa=newA();a.x=1000;//错误,不允许访问其他类对象中的私有成员a.y=2000;//错误,不允许访问其他类对象中的保护成员a.z=3000;//正确,允许访问其他类对象中的公有成员}Windows应用编程主讲:陈克力4.2类和对象2.成员的访问控制4.2.2对象的访问方法及访问控制【例4.1】在一个控制台应用程序中编写一个学生类student,该类包含学号(no)、姓名(name)和成绩(grade)等成员变量,并提供对这些变量成员进行赋值和读取这些成员变量的成员方法。classstudent{//成员变量intno;stringname;doublegrade;//成员方法publicintgetNo(){returnno;}publicstringgetName(){returnname;}publicdoublegetGrade(){returngrade;}publicvoidsetNo(intno){this.no=no;}publicvoidsetName(stringname){this.name=name;}publicvoidsetGrade(doublegrade){this.grade=grade;}}该类可以放在类Program中定义,也可以与类Program并列定义,可见,类可以嵌套定义private是默认的修饰符,故这些成员变量实际上是私有成员。Windows应用编程主讲:陈克力4.2类和对象2.成员的访问控制4.2.2对象的访问方法及访问控制staticvoidMain(string[]args){studentst=newstudent();st.setNo(100);st.setName(王智高);st.setGrade(92.5);Console.WriteLine(学号姓名成绩);Console.WriteLine({0}{1}{2},st.getNo(),st.getName(),st.getGrade());Console.ReadLine();}Windows应用编程主讲:陈克力4.2类和对象构造函数是在运用类来创建对象时首先被自动执行的方法成员,而且仅被执行一次,它通常用于对成员变量进行初始化。析构函数则是在对象被撤销(从内存中消除)时被执行,显然也仅仅执行一次,通用用于做对象被销毁前的“扫尾”工作。4.2.3类的构造函数和析构函数Windows应用编程主讲:陈克力4.2类和对象1.构造函数构造函数的定义格式如下:public类名([参数列表]){语句序列}4.2.3类的构造函数和析构函数说明:构造函数的名称必须与类名同名,构造函数不允许有返回类型,要使用public修饰符修饰,否则在非派生类中不能调用它来创建对象。构造函数可以带参数,也可以不带参数,要根据实际情况来决定。构造函数可以重载,即可以定义多个构造函
本文标题:C面向对象编程(类)方面
链接地址:https://www.777doc.com/doc-2909272 .html