}
Complexoperator+(Complex&c);
Complexoperator-(Complex&c);
Complexoperator*(Complex&c);
private:
doublerealPart;
doubleimagePart;
};
ComplexComplex:
:
operator+(Complex&c)
{
Complextemp;
temp.realPart=realPart+c.realPart;
temp.imagePart=imagePart+c.imagePart;
returntemp;
}
ComplexComplex:
:
operator-(Complex&c)
{
Complextemp;
temp.realPart=realPart-c.realPart;
temp.imagePart=imagePart-c.imagePart;
returntemp;
}
ComplexComplex:
:
operator*(Complex&c)
{
Complextemp;
temp.realPart=realPart*c.realPart-imagePart*c.imagePart;
temp.imagePart=realPart*c.imagePart+imagePart*c.realPart;
returntemp;
}
voidmain()
{
Complexc1(4,5),c2(3,2),sum,sub,mul;
sum=c1+c2;
sub=c1-c2;
mul=c1*c2;
cout<<"第一个复数:
";
c1.print();
cout<<"第二个复数:
";
c2.print();
cout<<"两个复数之和:
";
sum.print();
cout<<"两个复数之差";
sub.print();
cout<<"两个复数之积";
mul.print();
}
其运行结果如下:
实验5-6接口的实现
实验要求:
声明一个接口ICDPlayer,包含4个接口方法:
Play()、Stop()、NextTrack()和PreviousTrack(),以及一个只读属性CurrentTrank。
创建类CDPlayer实现该接口,模拟CD的播放、停止、下一音轨、上一音轨的操作。
按F5键运行:
实验5-7事件的实现
实验要求:
(1)声明提供事件数据的类。
(2)、声明事件处理委托。
(3)、声明引发事件的类(4)、在事件生产类中声明事件。
(5)在事件生产类中实现产生事件代码。
(6)声明处理事件的类(事件消费类)。
(7)在事件消费类中声明事件处理方法。
(8)在事件消费类中订阅或取消事件。
按F5键运行:
(一)结果分析与总结:
(1)、一个常量可以依懒于同一程序内的其他常量。
只要关系不是循环的,编译器会自动滚屏的安排的顺序来计算各个常量的声明。
常量名称的第一个字母一般都是大写,也可以全部都大写。
多个字符之间可用下划线连接成为常量名
(2)、通过使用operator关键字定义静态成员函数重载运算符,c#中的有的可以重载,但是[]和()不能重载。
但可以用索引来代替[]的重载,用户定义的数据类型转换代替()的重载。
比较运算符必须成对出现。
(3)、抽象类使用关键字abstract添加到实例方法的返回结果。
抽象类不能实例化对象,一般用于提供多个派生类的基类的公共定义。
抽象类不能直接实例化,用new初始化对象会出现编译错误。
可以定义抽象类型的变量,但是它必须是null,或是其派生类非抽象类的实例引用。
当从抽象类派生非抽象类时,非抽象必须实现所继承的所有抽象成员,故而重写那些抽象成员
(二)类在C#和C++中的区别与联系
(1)在C++中,继承的分类有单继承和多继承,而且在继承方式上分为公有继承、私有继承和保护继承;而在C#中继承只分为实现继承和接口继承。
(2)在C++中抽象类是指至少包含一个纯虚函数的特殊的类,它本身不能被实例化,必须通过继承得到派生类后,在派生类中定义了纯虚函数的具体的实现代码,才能获得一个派生类的对象;C#中将关键字abstract置于关键字class的前面可以将类声明为抽象类,抽象类不能被实例化,一般用于提供多个派生类可共享的基类的公共定义,并要求程序员使用该库通过创建派生类来提供自己的类实现。
(3)在运算符重载这一方面,c#和c++中的关键字都为operator,而且对能重载的运算符的要求也一样,但在重载的一般形式上有点区别,
c++的一般形式为:
<函数类型><类名>:
:
operator<重载的运算符>(<形参表>)
{……}//函数体
C#.net中的一般形式为:
[修饰符]static类型operator运算符(参数表)
{
转换代码体
}[;]
教教师签名:
年月日