Administrator
发布于 2025-10-10 / 0 阅读
0
0

C# 构造函数重载练习题

练习题 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 关键字(虽然在这些简单例子中没有使用)

  • 如何为类提供灵活的初始化方式


评论