假期 2.4

本文详细讲解了类与构造函数的基础概念,包括类成员类型、构造函数的使用、数据成员的访问和赋值,以及构造函数的必要性。还涉及了编程题示例,展示了如何创建和操作Person类实例。

第三章  类与构造函数

一.选择题

   1、下列不能作为类的成员的是(B)

A. 自身类对象的指针

B. 自身类对象

C. 自身类对象的引用

D. 另一个类的对象

   2、假定AA为一个类,a()为该类公有的函数成员,x为该类的一个对象,则访问x对象中函数成员a()的格式为(A)

A. x.a

B. x.a()

C. x->a

D. (*x).a()

3、已知:p是一个指向类A数据成员m的指针,A1是类A的一个对象。如果要给m赋值为5,正确的是(C)

A. A1.p=5;

B. A1->p=5;

C. A1.*p=5;

D. *A1.p=5;

 4、下列不具有访问权限属性的是(A)

A. 非类成员

B. 类成员

C. 数据成员

D. 函数成员

 5、 下面的叙述中那个是不正确的是__C_____

     A 类必须提供至少一个构造函数

     B 默认构造函数的形参列表中没有形参

     C 如果一个类没有有意义的默认值,则该类不应该提供默认构造函数

     D 如果一个类没有定义默认构造函数,则编译器会自动生成一个,同时将每个数据成员初始化为相关类型的默认值

二.填空题

1、给出下面程序输出结果。

#include <iostream>

using namespace std;

class Test

{   int x,y;

public:

Test(int i,int j=0)

{x=i;y=j;}

int get(int i,int j)

{return i+j;}

};

int main()

{ Test t1(2),t2(4,6);

int (Test::*p)(int,int);

p=&Test::get;

cout<<(t1.*p)(5,10)<<endl;

Test *p1=&t2;

cout<<(p1->*p)(7,20)<<endl;

}

2、下面程序运行的结果是:5+10=15。

#include <iostream.h>

class Test

{ private:

int x,y;

public:

Test() {x=y=0;}

void Setxy(int x,int y) {int z=x+y;______}

void show(){___cout << z << endl;___}

};

int main()

{  Test ptr;

ptr.Setxy(5,10);

ptr.show();

}

3、请在下面程序的横线处填上适当内容,以使程序完整,并使程序的输出为:

11,   10

13,   12

#include <iostream.h>

class A

{int a;

public:

A(int i=0){a=i;}

int Geta(){return a;}

void show(){cout<<a<<endl;}

};

class B

{

A a;

int b;

public:

B(int i,int j):A.a(A.a)____,_b(b)_____

{   }

void show(){cout<<a.Geta()<<","<<b<<endl;}

};

void main()

{   B   b[2]={B(10,11),B(12,13)};

for(int i=0;i<2;i++)

__B[i].show();________

}

三、改错题

 1. #include <iostream.h>

class Test

{ private:

int x,y=20;

public:

Test(int i,int j){ x=i,y=j; }//要设置有参构造和无参构造

int getx(){return x;}

int gety(){return y;}

};

void main()

{  Test mt(10,20);

cout<<mt.getx()<<endl;

cout<<mt.gety()<<endl;

}

2. #include <iostream.h>

class Test

{int x,y;

public:

void fun(int i,int j)

{x=i;y=j;}

void show()

{

cout<<"x="<<x;

if(y)

cout<<",y="<<y<<endl;

cout<<endl;

}

};

int main()

{  Test a;

   a.fun( )

a.fun(1);

a.show();

a.fun(2,4);

a.show();

}

3. #include <iostream.h>

class X

{  public:

int x;

public:

X(int x)

{cout<< this->x=x <<endl;}

X(X&t)

{x=t.x;

cout<<t.x<<endl;

}

void fun(X);

};

void fun(X t)

{ cout<<t.x<<endl;}

void main()

{ fun(X(10));}

4. #include <iostream.h>

#include <string.h>

class Bas

{  public:

Bas(char *s="\0"){strcpy(name,s);}

void show();

protected:

char name[20];

};

Bas b;

void show()

{   cout<<"name:"<<b.name<<endl;  }

void main()

{

Bas d2("hello");

show();

}

四、编程题

4.1   a: 编写一个类Person,表示一个人的名字和地址,使用string来保存每个元素

   b:为Person提供一个接受两个string参数的构造函数

  c:提供返回名字和地址的操作

  d:指明Person的那个成员应声明为public,那个成员应声明为private

#include <iostream>

using namespace std;
class Person
{
private:
    string name;
    string addr;
public:
    Person()
    {
        cout << "Person::无参构造函数" << endl;
    }
    Person(string name,string addr):name(name),addr(addr)
    {
        cout << "Person::有参构造函数" << endl;
    }
    string return_name()
    {
        return name;
    }
    string return_addr()
    {
        return addr;
    }

};

int main()
{
   Person a("张三","汤臣一品");
   cout << "姓名:" << a.return_name() << endl << "地址:" << a.return_addr() << endl;
    return 0;
}

虽然提供的参考引用未直接涉及Transformer模型用于四川电网春节节假日电量波动预测的案例,但可以基于通用的电量预测思路来构建分析过程。 ### 分析过程 1. **数据收集与预处理**:收集过去5年春节周期的负荷数据、天气数据(如气温、湿度等)以及节假日相关数据(如春节假期安排等)。对数据进行清洗,处理缺失值和异常值,然后进行归一化处理,以确保各特征处于相同的尺度范围。 2. **模型选择与训练**:选择Transformer模型进行预测。将处理后的数据划分为训练集和验证集,使用训练集对Transformer模型进行训练,通过调整模型的超参数,如学习率、层数、头数等,以最小化预测误差。 3. **对比模型训练**:同时选择LSTM模型进行训练,同样使用上述训练集数据。LSTM模型在处理时间序列数据方面有一定优势,但可能在捕捉长期依赖关系上不如Transformer模型。 4. **预测与评估**:使用训练好的Transformer和LSTM模型对未来10天的电量进行预测,得到预测曲线。将预测结果与实测负荷数据进行对比,使用评估指标(如均方误差、平均绝对误差等)来评估模型的性能。 ### 结果 - **预测准确性**:Transformer模型在捕捉春节节假日期间电量波动的复杂模式上可能表现更优,因为它能够更好地处理长期依赖关系和全局信息。相比之下,LSTM模型可能在某些局部波动的预测上存在一定偏差。 - **性能评估**:通过计算均方误差和平均绝对误差等指标,可以量化两个模型的预测误差。通常,Transformer模型的误差会相对较小,说明其预测结果更接近实测负荷数据。 ### 图示建议 - **绘制三条曲线**:在同一坐标系中绘制Transformer模型预测曲线、LSTM模型预测曲线和实测负荷曲线。横坐标为时间(未来10天),纵坐标为电量。 - **颜色区分**:为了清晰区分三条曲线,可以使用不同的颜色,如Transformer曲线用蓝色,LSTM曲线用红色,实测负荷曲线用绿色。 - **添加图例**:在图中添加图例,明确标注每条曲线代表的含义,方便读者理解。 - **标注关键信息**:在图中可以标注出春节的关键日期,如除夕、初一等,以便观察电量在这些特殊日期的波动情况。 以下是一个简单的Python代码示例,用于绘制三条曲线: ```python import matplotlib.pyplot as plt import numpy as np # 假设这里有Transformer、LSTM和实测负荷的预测数据 transformer_pred = np.random.rand(10) lstm_pred = np.random.rand(10) actual_load = np.random.rand(10) # 生成时间序列 time = np.arange(1, 11) # 绘制曲线 plt.plot(time, transformer_pred, label='Transformer', color='blue') plt.plot(time, lstm_pred, label='LSTM', color='red') plt.plot(time, actual_load, label='Actual Load', color='green') # 添加图例 plt.legend() # 添加标题和坐标轴标签 plt.title('Electricity Load Prediction during Spring Festival in Sichuan Power Grid') plt.xlabel('Time (days)') plt.ylabel('Electricity Load') # 显示图形 plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值