练习题 1:学生类
// 创建一个Student类,要求:
// 1. 默认构造函数:初始化姓名为"未知",年龄为0
// 2. 带一个参数的构造函数:只设置姓名,年龄默认为0
// 3. 带两个参数的构造函数:设置姓名和年龄
练习题 2:矩形类
// 创建一个Rectangle类,要求:
// 1. 默认构造函数:长和宽都初始化为1.0
// 2. 带一个参数的构造函数:设置正方形边长(长=宽)
// 3. 带两个参数的构造函数:分别设置长和宽
练习题 3:银行账户类
// 创建一个BankAccount类,要求:
// 1. 默认构造函数:账户名为"未命名",余额为0.0
// 2. 带一个参数的构造函数:设置账户名,余额默认为0.0
// 3. 带两个参数的构造函数:设置账户名和初始余额
练习题 4:时间类
// 创建一个Time类,要求:
// 1. 默认构造函数:时、分、秒都初始化为0
// 2. 带一个参数的构造函数:只设置小时,分和秒为0
// 3. 带两个参数的构造函数:设置小时和分钟,秒为0
// 4. 带三个参数的构造函数:设置小时、分钟和秒
练习题 5:书籍类
// 创建一个Book类,要求:
// 1. 默认构造函数:书名为"未知",作者为"未知",价格为0.0
// 2. 带两个参数的构造函数:设置书名和作者,价格默认为0.0
// 3. 带三个参数的构造函数:设置书名、作者和价格
练习题 1:学生类答案
using System;
public class Student
{
private string name;
private int age;
// 默认构造函数
public Student()
{
name = "未知";
age = 0;
Console.WriteLine("调用默认构造函数");
}
// 带一个参数的构造函数
public Student(string n)
{
name = n;
age = 0;
Console.WriteLine("调用单参数构造函数");
}
// 带两个参数的构造函数
public Student(string n, int a)
{
name = n;
age = a;
Console.WriteLine("调用双参数构造函数");
}
public void Display()
{
Console.WriteLine($"姓名:{name},年龄:{age}");
}
}
// 测试代码
public class Program
{
public static void Main()
{
Student s1 = new Student(); // 调用默认构造函数
Student s2 = new Student("张三"); // 调用单参数构造函数
Student s3 = new Student("李四", 18); // 调用双参数构造函数
s1.Display();
s2.Display();
s3.Display();
}
}
练习题 2:矩形类答案
using System;
public class Rectangle
{
private double length;
private double width;
// 默认构造函数
public Rectangle()
{
length = 1.0;
width = 1.0;
Console.WriteLine("调用默认构造函数:创建1x1矩形");
}
// 带一个参数的构造函数(正方形)
public Rectangle(double side)
{
length = side;
width = side;
Console.WriteLine($"调用单参数构造函数:创建{side}x{side}正方形");
}
// 带两个参数的构造函数
public Rectangle(double l, double w)
{
length = l;
width = w;
Console.WriteLine($"调用双参数构造函数:创建{l}x{w}矩形");
}
public double GetArea()
{
return length * width;
}
public void Display()
{
Console.WriteLine($"矩形:长={length},宽={width},面积={GetArea()}");
}
}
// 测试代码
public class Program
{
public static void Main()
{
Rectangle r1 = new Rectangle(); // 默认矩形
Rectangle r2 = new Rectangle(5.0); // 正方形
Rectangle r3 = new Rectangle(4.0, 3.0); // 矩形
r1.Display();
r2.Display();
r3.Display();
}
}
练习题 3:银行账户类答案
using System;
public class BankAccount
{
private string accountName;
private double balance;
// 默认构造函数
public BankAccount()
{
accountName = "未命名";
balance = 0.0;
Console.WriteLine("调用默认构造函数");
}
// 带一个参数的构造函数
public BankAccount(string name)
{
accountName = name;
balance = 0.0;
Console.WriteLine("调用单参数构造函数");
}
// 带两个参数的构造函数
public BankAccount(string name, double initialBalance)
{
accountName = name;
balance = initialBalance;
Console.WriteLine("调用双参数构造函数");
}
public void Display()
{
Console.WriteLine($"账户名:{accountName},余额:{balance:C}");
}
public void Deposit(double amount)
{
balance += amount;
Console.WriteLine($"存款:{amount:C},当前余额:{balance:C}");
}
}
// 测试代码
public class Program
{
public static void Main()
{
BankAccount acc1 = new BankAccount(); // 默认账户
BankAccount acc2 = new BankAccount("张三"); // 只有账户名
BankAccount acc3 = new BankAccount("李四", 1000.0); // 账户名和初始余额
acc1.Display();
acc2.Display();
acc3.Display();
acc2.Deposit(500.0); // 测试存款功能
}
}
练习题 4:时间类答案
using System;
public class Time
{
private int hours;
private int minutes;
private int seconds;
// 默认构造函数
public Time()
{
hours = 0;
minutes = 0;
seconds = 0;
Console.WriteLine("调用默认构造函数");
}
// 带一个参数的构造函数
public Time(int h)
{
hours = h;
minutes = 0;
seconds = 0;
Console.WriteLine("调用单参数构造函数");
}
// 带两个参数的构造函数
public Time(int h, int m)
{
hours = h;
minutes = m;
seconds = 0;
Console.WriteLine("调用双参数构造函数");
}
// 带三个参数的构造函数
public Time(int h, int m, int s)
{
hours = h;
minutes = m;
seconds = s;
Console.WriteLine("调用三参数构造函数");
}
public void Display()
{
Console.WriteLine($"时间:{hours:D2}:{minutes:D2}:{seconds:D2}");
}
public void Display12Hour()
{
string period = "AM";
int displayHours = hours;
if (hours >= 12)
{
period = "PM";
if (hours > 12) displayHours = hours - 12;
}
if (hours == 0) displayHours = 12;
Console.WriteLine($"12小时制:{displayHours:D2}:{minutes:D2}:{seconds:D2} {period}");
}
}
// 测试代码
public class Program
{
public static void Main()
{
Time t1 = new Time(); // 00:00:00
Time t2 = new Time(9); // 09:00:00
Time t3 = new Time(14, 30); // 14:30:00
Time t4 = new Time(20, 45, 15); // 20:45:15
t1.Display();
t2.Display();
t3.Display();
t4.Display();
Console.WriteLine("\n12小时制显示:");
t3.Display12Hour();
t4.Display12Hour();
}
}
练习题 5:书籍类答案
using System;
public class Book
{
private string title;
private string author;
private double price;
// 默认构造函数
public Book()
{
title = "未知";
author = "未知";
price = 0.0;
Console.WriteLine("调用默认构造函数");
}
// 带两个参数的构造函数
public Book(string t, string a)
{
title = t;
author = a;
price = 0.0;
Console.WriteLine("调用双参数构造函数");
}
// 带三个参数的构造函数
public Book(string t, string a, double p)
{
title = t;
author = a;
price = p;
Console.WriteLine("调用三参数构造函数");
}
public void Display()
{
Console.WriteLine($"书籍:'{title}',作者:{author},价格:{price:C}");
}
public void ApplyDiscount(double discountPercent)
{
double discountAmount = price * (discountPercent / 100);
price -= discountAmount;
Console.WriteLine($"应用{discountPercent}%折扣,新价格:{price:C}");
}
}
// 测试代码
public class Program
{
public static void Main()
{
Book b1 = new Book(); // 默认书籍
Book b2 = new Book("C#编程", "王老师"); // 只有书名和作者
Book b3 = new Book("数据结构", "张教授", 59.9); // 完整信息
b1.Display();
b2.Display();
b3.Display();
b3.ApplyDiscount(10); // 测试打折功能
b3.Display();
}
}
综合测试程序
// 如果你想一次性测试所有类,可以使用这个综合测试程序
public class ComprehensiveTest
{
public static void Main()
{
Console.WriteLine("=== 学生类测试 ===");
Student student = new Student("测试学生", 20);
student.Display();
Console.WriteLine("\n=== 矩形类测试 ===");
Rectangle rect = new Rectangle(6, 4);
rect.Display();
Console.WriteLine("\n=== 银行账户测试 ===");
BankAccount account = new BankAccount("测试账户", 2000);
account.Display();
Console.WriteLine("\n=== 时间类测试 ===");
Time time = new Time(15, 30, 45);
time.Display();
time.Display12Hour();
Console.WriteLine("\n=== 书籍类测试 ===");
Book book = new Book("C#入门", "陈老师", 49.9);
book.Display();
}
}
这些答案展示了C#中构造函数重载的基本用法,每个类都提供了多个构造函数来适应不同的初始化需求。初学者可以通过这些例子理解:
如何定义多个构造函数
构造函数如何根据参数数量被调用
如何使用
this
关键字(虽然在这些简单例子中没有使用)如何为类提供灵活的初始化方式