习题4参考解答
1、编写一个控制台应用
程序,完成下列功能。
(1)创建一个类,用无参数的构造函数输出该类的类名。
(2)增加一个重载的构造函数,带有一个string类型的参数,在此构造函数中将传递的字符串打印出来。
(3)在Main方法中创建属于这个类的一个对象,不传递参数。
(4)在Main方法中创建属于这个类的另一个对象,传递一个字符串“Thisisastring.”。
(5)在Main方法中声明类型为这个类的一个具有5个对象的数组,但不要实际创建分配到数组里的对象。
(6)写出运行程序应该输出的结果。
【解答】
usingSystem;
classTest1
{
publicTest1()
{
Console.WriteLine(this);
}
publicTest1(stringstr)
{
Console.WriteLine(str);
}
publicstaticvoidMain()
{
Test1t1=newTest1();
Test1t2=newTest1("Thisisastring.");
Test1[]t3=newTest1[5];
}
}
输出结果:
Test1
Thisisastring.
2、编写一个控制台应用程序,定义一个类MyClass,类中包含有public、private以及protected数据成员及方法。然后定义一个从MyClass类继承的类MyMain,将Main方法放在MyMain中,在Main方法中创建MyClass类的一个对象,并分别访问类中的数据成员及方法。要求注明在试图访问所有类成员时哪些语句会产生编译错误。
【解答】
usingSystem;
classMyClass
{
publicinti;
privateintj;
protectedintk;
publicvoidmethod1()
{
Console.WriteLine("publicmethod.");
}
privatevoidmethod2()
{
Console.WriteLine("privatemethod.");
}
protectedvoidmethod3()
{
Console.WriteLine("protectedmethod.");
}
}
classMyMain:MyClass
{
publicstaticvoidMain()
{
MyClasst=newMyClass();
Console.WriteLine("i={0}",t.i);
Console.WriteLine("j={0}",t.j);//会出现编译错误,私有成员不允许在其它类中访问
Console.WriteLine("k={0}",t.k);//会出现编译错误,应该创建MyMain的对象,然
//后通过MyMain的对象访问
t.method1();
t.method2();//会出现编译错误,私有的方法不允许在其它类中调用
t.method3();//会出现编译错误,应该创建MyMain的对象,然后通过MyMain的
//对象调用该方法
}
}
3、创建一个类包含有protected数据。在相同的文件里创建第二个类,用一个方法操纵第一个类里的protected数据。
【解答】
usingSystem;
classClass1
{
protectedinti=5;
protectedvoidMyMethod()
{
Console.WriteLine("protectedmethod.");
}
}
classClass2:Class1
{
privatevoidNewMethod()
{
Console.WriteLine(this.i);
this.i+=10;
Console.WriteLine(this.i);
}
publicstaticvoidMain()
{
Class2t=newClass2();
t.NewMethod();
}
}
4、结构和类的区别是什么?
【解答】
1)结构是一个值类型,保存在栈上,而类是一个引用类型,保存在受管制的堆上。
2)对结构中的数据进行操作比对类或对象中的数据进行操作速度要快。
3)一般用结构存储多种类型的数据,当创建一个很多类或对象共用的小型对象时,使用结构效率更高。