您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第4章面向对象编程方法
第4章面向对象编程方法4.1一个简单的程序4.2类和对象4.3类的继承、重载与多态4.4运算符的重载4.5接口及其实现4.6方法的委托4.7常用的几个类4.8命名空间本章内容C#程序设计教程——蒙祖强编著定义一个简单的类——虚数类Complex并利用该类来创建虚数对象,实现虚数类的加减运算。4.1一个简单的程序——虚数类的定义与应用C#程序设计教程——蒙祖强编著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来设定C#程序设计教程——蒙祖强编著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):重载取反运算符号“-”(一元运算),当调用此运算符时,虚数的实部和虚部将被取反C#程序设计教程——蒙祖强编著4.1一个简单的程序——虚数类的定义与应用//对减号-重载(二元运算符重载)publicstaticComplexoperator-(Complexc1,Complexc2){Complexc=newComplex(c1.RP-c2.RP,c1.IP-c2.IP);returnc;}operator-(Complexc1,Complexc2):重载减法运算符号“-”(二元运算),使得两个虚数对象可以相减C#程序设计教程——蒙祖强编著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():用于从屏幕上输出一个虚数C#程序设计教程——蒙祖强编著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();}C#程序设计教程——蒙祖强编著4.1一个简单的程序——虚数类的定义与应用此例子涉及到的知识点包括:类的定义及对象的创建和运算;公有成员和私有成员的定义方法;成员变量的定义及其运用;一般成员函数的定义及其重载;构造函数的定义及其重载;一元和二元运算重载;除此外,面向对象编程方法还涉及到类的继承、多态、析构函数等内容,下面将系统介绍面向对象编程方法的这些内容。C#程序设计教程——蒙祖强编著4.2类和对象类的定义格式如下:class类名{成员变量;成员方法;}[;]4.2.1类和对象的定义例如:classA{intx;//成员变量intf()//成员方法{returnx;}}C#程序设计教程——蒙祖强编著4.2类和对象声明对象和创建对象的语法格式分别如下:类名对象名;//声明对象对象名=new类名();//创建对象也可以在声明的同时创建对象:类名对象名=new类名();4.2.1类和对象的定义利用类A来创建对象a:Aa;a=newA();上述代码等价于:Aa=newA();C#程序设计教程——蒙祖强编著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=200C#程序设计教程——蒙祖强编著4.2类和对象2.成员的访问控制4.2.2对象的访问方法及访问控制访问控制是通过在类成员前冠以修饰符来实现:private:用这种修饰符修饰的成员称为私有成员。私有成员只能被该类中的其他成员访问,其他类(包括派生类)中的成员是不允许直接访问的。C#中private是默认的修饰符。public:用这种修饰符修饰的成员称为公有成员。公有成员允许该类和其他类中的所有成员访问。protected:用这种修饰符修饰的成员称为保护成员。保护成员可以被该类和其派生类中的成员访问,而其他类中的成员则不允许访问。C#程序设计教程——蒙祖强编著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;//正确,允许访问其他类对象中的公有成员}C#程序设计教程——蒙祖强编著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是默认的修饰符,故这些成员变量实际上是私有成员。C#程序设计教程——蒙祖强编著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();}C#程序设计教程——蒙祖强编著4.2类和对象构造函数是在运用类来创建对象时首先被自动执行的方法成员,而且仅被执行一次,它通常用于对成员变量进行初始化。析构函数则是在对象被撤销(从内存中消除)时被执行,显然也仅仅执行一次,通用用于做对象被销毁前的“扫尾”工作。类似c++的析构函数。4.2.3类的构造函数和析构函数C#程序设计教程——蒙祖强编著4.2类和对象1.构造函数构造函数的定义格式如下:public类名([参数列表]){语句序列}4.2.3类的构造函数和析构函数说明:构造函数的名称必须与类名同名,构造函数不允许有返回类型,要使用public修饰符修饰,否则在非派生类中不能调用它来创建对象。在定义类时,如果没有显式定义构造函数,则实例化对象时会自动调用默认的构造函数。如果一旦定义了构造函数,则默认构造函数不会被调用。默认构造函数的作用是将对象成员的初始值设置为默认的值,如数值类型变量初始化为0,字符串型变量被初始化为null(空值),字符类型变量被初始化为空字符等。C#程序设计教程——蒙祖强编著4.2类和对象1.构造函数【例4.2】使用默认构造函数的例子。下面定义了类B1,其中并没有显式定义构造函数:classB1{intx;strings;charc;publicvoidoutmembers(){Console.WriteLine(x={0},s=x{1}x,c=x{2}x,x,s,c);}}4.2.3类的构造函数和析构函数方法outmembers用于输出各变量的初始值B1b1=newB1();//调用默认构造函数创建对象b1b1.outmembers();C#程序设计教程——蒙祖强编著4.2类和对象1.构造函数【例4.3】定义多个构造函数(重载),并分别调用它们创建对象。classB2{intx;st
本文标题:第4章面向对象编程方法
链接地址:https://www.777doc.com/doc-2110041 .html