c++ oj第一次上机实验

本文通过多个实例详细讲解了C++中类的定义、构造函数、析构函数及成员方法的应用,涵盖基本操作到进阶技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

a题

Problem A: 类的初体验

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 1553   Solved: 1371
[ Submit][ Status][ Web Board]

Description

定义一个类Data,只有一个double类型的属性和如下3个方法:
1.    void init(double d);——初始化属性值。

2.   double getValue()——获得属性值。

3.    void showValue()——显示属性值。

Input

一个double类型的数值。

Output

输出输入的值2次,每次占一行。

Sample Input

3.14

Sample Output

3.14
3.14

HINT

Append Code


int main()
{
    Data data;
    double d;
    cin>>d;
    data.init(d);
    cout<<data.getValue()<<endl;
    data.showValue();
}
答案:
#include <iostream>
using namespace std;
class Data
{
private:
    double i;
public:
    void init(double d)
    {
        i=d;
    }
    double getValue()
    {
        return i;
    }
    void showValue()
    {
        cout<<i<<endl;
    }
};
这啥啊。。就是那种,最基本的对象、类什么的。
回顾一下吧:
类:包括私有成员,protected,公有成员。对于一个对象,如果需要被其他的对象(哪怕是同一类的)访问,就需要将这个成员设置为公有。
注:关于构造函数:如果在类中出现了构造函数,则就需要将各种构造函数的情况补充完整。
如果没有任何的构造函数,则便以其自动写出一个构造函数。

b题

Problem B: 类的初体验(II)

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 1487   Solved: 1353
[ Submit][ Status][ Web Board]

Description

定义一个类Data,只有一个double类型的属性和如下3个方法:
1.   带1个参数的构造函数——初始化属性值为参数值。

2.   double getValue()——获得属性值。

3.    void showValue()——显示属性值。

Input

一个double类型的数值。

Output

输出输入的值2次,每次占一行。

Sample Input

3.14

Sample Output

3.14
3.14

HINT

Append Code

int main()
{
    double d;
    cin>>d;
    Data data(d);
    cout<<data.getValue()<<endl;
    data.showValue();
}

答案:
#include <iostream>
using namespace std;
class Data
{
private:
    double i;
public:
    Data(double ii):i(ii)
    {

    }
    double getValue()
    {
        return i;
    }
    void showValue()
    {
        cout<<i<<endl;
    }
};
int main()
{
    double d;
    cin>>d;
    Data data(d);
    cout<<data.getValue()<<endl;
    data.showValue();
}
同上一道题,对构造函数的用法进行练习;
题目C:

Problem C: 类的初体验(III)

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 1623   Solved: 1395
[ Submit][ Status][ Web Board]

Description

定义一个类Data,只有一个double类型的属性和如下4个方法:
1.   缺省构造函数,将属性初始化为0,并输出“Initialize a data 0”。

2.  带参构造函数,将属性初始化为指定参数,并输出“Initialize a data #”,其中“#”即参数值。

2.   double getValue()——获得属性值。

3.    void showValue()——显示属性值。

Input

一个double类型的数值。

Output

见样例。

Sample Input

3.14

Sample Output

Initialize a data 0
Initialize a data 3.14
3.14
3.14

HINT

Append Code

int main()
{
    Data data1;
    double d;
    cin>>d;
    Data data(d);
    cout<<data.getValue()<<endl;
    data.showValue();
}

答案:

#include <iostream>
using namespace std;
class Data
{
private:
    double i;
public:
    Data(double ii):i(ii)
    {
        cout<<"Initialize a data "<<i<<endl;
    }
    Data():i(0)
    {
        cout<<"Initialize a data 0\n";
    }

    double getValue()
    {
        return i;
    }
    void showValue()
    {
        cout<<i<<endl;
    }
};
int main()
{
    Data data1;
    double d;
    cin>>d;
    Data data(d);
    cout<<data.getValue()<<endl;
    data.showValue();
}

缺省构造函数的定义: 缺省构造函数,又称默认构造函数,是C++以及其他的一些面向对象的程序设计语言中,对象的不需要参数即可调用的构造函数。
在这个题里面,把缺省构造函数单独写成一种构造函数。
题目d

Problem D: 你会定义类吗?

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 2019   Solved: 1547
[ Submit][ Status][ Web Board]

Description

定义一个类Demo,有构造函数、析构函数和成员函数show(),其中show()根据样例的格式输出具体属性值。该类只有一个int类型的成员。

Input

输入只有一个整数,int类型范围内。

Output

见样例。

Sample Input

-100

Sample Output

A data 10 is created!
A data 0 is created!
A data -100 is created!
This is data 10
This is data 0
This is data -100
A data -100 is erased!
A data 0 is erased!
A data 10 is erased!

HINT

Append Code

int main()
{
    Demo tmp(10), tmp2;
    int d;
    cin>>d;
    Demo tmp3(d);
 
    tmp.show();
    tmp2.show();
    tmp3.show();
    return 0;
}
答案:
#include <iostream>
using namespace std;
class Demo
{
private:
    int i;
public:
    Demo(int ii=0):i(ii)
    {
        cout<<"A data "<<i<<" is created!\n";
    }
    ~Demo()
    {
        cout<<"A data "<<i<<" is erased!\n";
    }
    void show()
    {
        cout<<"This is data "<<i<<endl;
    }
};
int main()
{
    Demo tmp(10), tmp2;
    int d;
    cin>>d;
    Demo tmp3(d);

    tmp.show();
    tmp2.show();
    tmp3.show();
    return 0;
}

在类中,构造函数和析构函数都是可以有内容的。
析构的过程是:在此作用域中最后构造的是最先释放的。


题目E

Problem E: 字符的变化

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 1904   Solved: 1335
[ Submit][ Status][ Web Board]

Description

定义一个Character类,具有:

1. char类型的数据成员。

2.构造函数Character(char)。

3. Character toUpper():如果当前字符是英文小写字母时,则变为相应的大写字母;否则保持当前字符不变。注意:不要改变当前对象的属性值。

4. Character toLower():如果当前字符是英文大写字母时,则变为相应的小写字母;否则保持当前字符不变。注意:不要改变当前对象的属性值。

5. void show():显示当前字符,不输出换行。

Input

第1行N>0表示有N个测试用例。

每个测试用例只有1个字符。

Output

见样例。

Sample Input

3
a
A
1

Sample Output

char upper lower
a    A     a
A    A     a
1    1     1

HINT

Append Code


int main()
{
    int cases;
    char c;
    cin>>cases;
    cout<<"char"<<" upper"<<" lower"<<endl;
    for (int i = 0; i < cases; i++)
    {
        cin>>c;
        Character character(c);
        character.show();
        cout<<"    ";
        character.toUpper().show();
        cout<<"     ";
        character.toLower().show();
        cout<<endl;
    }
}
答案:
#include <iostream>
using namespace std;
class Character
{
private:
    char c;
public:
    Character(char cc):c(cc)
    {

    }
    Character toUpper()
    {
        if(c>='a'&&c<='z')
            c='A'+c-'a';
        return *this;
    }
    Character toLower()
    {
        if(c>='A'&&c<='Z')
            c='a'+c-'A';
        return *this;
    }
    void show()
    {
        cout<<c;
    }
};
int main()
{
    int cases;
    char c;
    cin>>cases;
    cout<<"char"<<" upper"<<" lower"<<endl;
    for (int i = 0; i < cases; i++)
    {
        cin>>c;
        Character character(c);
        character.show();
        cout<<"    ";
        character.toUpper().show();
        cout<<"     ";
        character.toLower().show();
        cout<<endl;
    }
}

在这道里面,注意,成员函数数的返回值可以是它本身,这时候需要借助this指针的帮助。
另外:注意算法!!不要慌张。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值