例子:1.使用类String类的分割split 将字符串 “Solutions to selected exercises can be found in the electronic document The Thinking in C# Annotated Solution Guide, available for a small fee from BruceEckel” 单词提取输出。单词以空格或,分割。
namespace pr7
{
class Pr7_4
{
static void Main(string[] args)
{
string ss="Solutions to selected exercises can be found in the electronic document The Thinking in C# Annotated Solution Guide, available for a small fee from BruceEckel";
string[] s = ss.Split(' ',',');//split()方法参数是char类型且是可变的
for (int i = 0; i < s.Length; i++)
{
Console.WriteLine(s[i]);
}
Console.ReadLine();
}
}
}
2.
(综合题)完成一个完整的时期类MyDate,要求有年月日三个属性,实现其构造函数以及属性访问器函数。
1)ToString函数,要求输出如1999-08-26日。
2)完成日期的加法。形式参数为天数
MyDate DateAdd(int days){….};
3)比较日期前后大小函数 ,返回0表示相等,1大于,-1小于。
int compareTo(MyDate date){
…
}
4)任意给定两个日期,计算两个日期差多少天函数。
5)已知1990-01-01是星期一这个事实,完成任意给定年月,输出该月月历形式。
函数原型:
public void dispMonthDay(int year,int month){
…
namespace pr7
{
class MyDate
{
private int year;
private int month;
private int day;
public MyDate(int year, int month, int day)
{
this.year = year;
this.month = month;
this.day = day;
}
public int Year
{
get
{
return this.year;
}
set
{
this.year = value;
}
}
public int Month
{
get
{
return this.month;
}
set
{
this.month = value;
}
}
public int Day
{
get
{
return this.day;
}
set
{
this.day = value;
}
}
public override string ToString()
{
return (year + "-" + month + "-" + day + "日");
}
public MyDate DateAdd(int days)//相加后计算天数
{
MyDate md = new MyDate(this.Year, this.Month, this.Day);
int d = md.day + days;
if ((md.month == 1) || (md.month == 3) || (md.month == 5) || (md.month == 7) || (md.month == 8) || (md.month == 10))
{
if (d > 31)
{
md.month = md.month + 1;
md.day = d - 31;
}
else
md.day = d;
}
else if ((md.month == 4) || (md.month == 6) || (md.month == 9) || (md.month == 11))
{
if (d > 30)
{
md.month = md.month + 1;
md.day = d - 30;
}
else
md.day = d;
}
else if (md.month == 12)
{
if (d > 31)
{
md.year = this.year + 1;
md.month = 1;
md.day = d - 31;
}
else
md.day = d;
}
else if (md.month == 2)
{
if ((md.year % 4 == 0) && (md.year % 100 != 0) || (md.year % 400 == 0))
{
if (d > 29)
{
md.day = d - 29;
md.month = md.month + 1;
}
}
else if (d > 28)
{
md.day = d - 28;
md.month = md.month + 1;
}
else
md.day = d;
}
return md;
}
public int compareTo(MyDate date)//比较大小
{
int flag = 0;//标志位
if (this.Year > date.year)
flag = 1;
else if (this.Year < date.Year)
flag = -1;
else
{
if (this.Month > date.Month)
flag = 1;
else if (this.Month < date.Month)
flag = -1;
else
{
if (this.Day > date.Day)
flag = 1;
else if (this.Day < date.Day)
flag = -1;
else
flag = 0;
}
}
return flag;
}
public int xc(MyDate date)//计算相差的天数
{
MyDate min = this;
MyDate max = date;
int sum = 0;//定义距离那个小的日期的天数
int sum1 = 0;//定义小的日期距离这一年开始的天数
int jg = 0;
int pd = this.compareTo(date);
if (pd == 0)
return 0;
else if (pd > 1)
{
min = date;
max = this;
}
for (int i = min.Year; i < max.Year; i++)
{
if ((min.Year % 4 == 0 && min.Year % 100 != 0) || min.Year % 400 == 0)
sum = sum + 366;
else
sum = sum + 365;
}
for (int i = 1; i < max.Month; i++)
{
if ((i == 1) || (i == 3) || (i == 5) || (i == 7) || (i == 8) || (i == 10) || (i == 12))
sum = sum + 31;
else if ((i == 4) || (i == 6) || (i == 9) || (i == 11))
sum = sum + 30;
else if ((max.Year % 4 == 0 && max.Year % 100 != 0) || max.Year % 400 == 0)
{
if (i == 2)
{
sum = sum + 29;
}
}
else
sum = sum + 28;
}
sum = sum + max.Day;
for (int i = 1; i < min.Month; i++)
{
if ((i == 1) || (i == 3) || (i == 5) || (i == 7) || (i == 8) || (i == 10) || (i == 12))
sum1 = sum1 + 31;
else if ((i == 4) || (i == 6) || (i == 9) || (i == 11))
sum1 = sum1 + 30;
else if ((min.Year % 4 == 0 && min.Year % 100 != 0) || min.Year % 400 == 0)
{
if (i == 2)
{
sum1 = sum1 + 29;
}
}
else
sum1 = sum1 + 28;
}
sum1 = sum1 + min.Day;
jg = sum - sum1;
return jg;
}
}
class Pr7_5
{
static void Main(string[] args)
{
MyDate md = new MyDate(2012, 3, 20);
Console.WriteLine(md);
MyDate mm = md.DateAdd(70);
Console.WriteLine(mm);
int flag = md.compareTo(mm);
if (flag > 1)
Console.WriteLine(md.ToString() + "大于" + mm.ToString());
else if (flag < 1)
Console.WriteLine(md.ToString() + "小于" + mm.ToString());
else
Console.WriteLine(md.ToString() + "等于" + mm.ToString());
int ts = md.xc(mm);
Console.WriteLine("相差:" + ts + "天");
Console.ReadLine();
}
}
}
1.当父类某个函数允许覆盖(虚函数virtual),子类同名函数(形参也相同)可以上传并覆盖父类虚函数,形成动态绑定。
class A{
public virtual void fun1(){
…
}
public void fun2(){
…
}
}
class B: A{
public override void fun1(){
…
}
public void fun2(){
…
A obj1=new A();
obj1.fun1(); //A
obj1.fun2(); //A
B obj2=new B();
obj2.fun1(); //B
obj2.fun2(); //B
A obj3=new B();
obj3.fun1(); //A实例中fun1()是虚函数被子类实例 fun1()覆盖。
obj3.fun2(); //A
obj3.fun3();//错误,不能调用子类成员函数。
2.多态性概念:
使用同一个名称,其依据Context不同,产生不同功能。如对象调用同一函数,随着引用实例不同,实现功能也不相同。
Shape shape=new Cirlce();
shape.area();
shape=new Rect();
shape.area();
在OOP编程中,实现多态一般通过子类重写父类中虚函数或抽象函数来实现,
abstract class Shape{
public abstract double area();
public void disp(){
…
}
}
抽象类不能实例化.(基类)
class Circle :Shape{
public override double area(){
..
}
3.接口Interface定义与使用接口是一种特殊类,接口中只有抽象函数与抽象属性声明
1)接口定义
interface IShape
{
double area();
double length();
}
class Circle : IShape
{
private double r;
public Circle() { }
public Circle(double r)
{
this.r = r;
}
public double area()
{
return Math.PI*r*r;
}
public double length()
{
return 2 * Math.PI * r;
}
}
class Rect : IShape
{
private double w, h;
public Rect() { }
public Rect(double w, double h)
{
this.w = w; this.h = h;
}
public double area()
{
return w*h;
}
public double length()
{
return 2*(w+h);
}
}