c++学习笔记...对象的使用

笔者为计科大一菜鸡,此文章的初衷只是为了督促自己做点笔记,内容仅供参考,请大家理性看待!

对象指针只能访问该类的公有数据成员和函数成员

区别:对象名访问对象成员使用“.”运算符,对象指针采用“->”

其格式为:对象指针名->数据成员名/ 对象指针名->成员函数名(参数表)

使用对象指针有两个好处:1.实现信息的双向传递(通过在函数调用时将实参对象的地址传递给形参指针对象,使形参指针对象和实参指针对象指向同一内存地址,那么对象指针所指向对象的改变也同样影响这实参对象) 2.减小时空开支,提高运行效率,(实际上给函数传参数更好的做法是传引用 )

 时间加法程序部分代码引用(上图)

 this指针:this指针是一个系统预定义的特殊指针,指向当前对象,表示当前对象的地址

 上图中语句1、2、3是等效的

(为了与类的数据成员H,M,S区别,将SetTime的形参名设为h,m,s)

(但如果使用This指针,就可以用它来区分本对象的数据成员与其他变量)

注意:this指针不是调用对象的名称,而是指向调用对象的指针的名称

对象引用就是对某类对象定义一个引用,其实质是通过将被引用对象的地址赋给引用对象,使二者指向同一内存空间,这样引用对象就成为了被引用对象的“别名”。

定义一个对象引用,并同时指向一个对象的格式为:

类名 & 对象引用名=被引用对象;

注意:被引用对象与对象引用必须是同类型;除非作为函数参数与函数返回值,否则都要在定义对象引用时对其初始化;定义一个对象引用不分配任何内存空间

对象引用的使用格式:对象引用名  . 数据成员名/对象引用名 . 成员函数名(参数表)

 上图为通过对象引用使用对象的成员

/*本文中所用到的时间加法程序代码如下*/

(为了防止,被引用后的实参在函数内部被改变,一般会在定义对象引用时加上”const“,当然,如果你希望在函数中改变它,则不用加)

#include <iostream>
using namespace std;
class Clock
{
private:
    int H M S;
public:
    void SetTime(int h,int m,int s,)
    {
        H=(h>=0&&h<24)?h:0;
        M=(m>=0&&m<60)?m:0;
        S=(s>=0&&s<60)?s:0;
    }
    void ShowTime()
    {
        cout<<H<<":"<<M<<":"<<S<<endl;
    }
    void TimeAdd(const Clock & Cr)
    {
        H=(Cr.H+H+(Cr.M+M+(Cr.S+S)/60)/60)%24;
        M=(Cr.M+M+(Cr.S+S)/60)%60;
        S=(Cr.S+S)%60;
    }
};
int main(void)
{
    Clock MyClock1,MyClock2;
    MyClock1.SetTime(8,30,30);
    MyClock2.SetTime(0,0,30);
    MyClock1.TimeAdd(MyClock);
    MyClock2.ShowTime();
}

对象数组是以对象为元素的数组,与结构体数组类似

对象数组的定义格式为:类名 对象数组名[常量表达式n],...,[常量表达式2][常量表达式1];

对象数组元素的存取格式为:

对象数组名[下标表达式1][下标表达式2]...[下标表达式m].数据成员名//对象数组名[下标表达式1][下标表达式2]...[下标表达式m].成员函数名(参数表)

 对象数组引用例子:计算一个班学生的总成绩。

首先设计一个类Score,这个类的数据成员为学号、数学成绩、程设成绩,成员函数有求总成绩、显示成绩。然后,定义一个对象数组存储成绩。最后注意调用成员函数求每个学生的总评成绩(其代码如下:)

#include <iostream>
using namespace std;
class Score
{
private:
    int No,math,language,
    total;
public:
    void SetScore(int no,int m,int l);
    void Count();
    void ShowScore();
};
void Score::Count()
{
    total=math+language;
}
void Score::ShowScore()
{
    cout<<No<<" "<<total<<endl;
}
void Score::SetScore(int no,int m,int l)
{
    No=no;math=m;language=l;
}
int main()
{
    Score ClassScore[3];
    int num,ms,ls;
    for(int i=0; i<3; i++)
    {
        cin>>num>>ms>>ls;
        ClassScore[i].SetScore(num,ms,ls);
        ClassScore[i].Count();
    }
    cout<<"The Score are:"<<endl;
    for(int i=0; i<3; i++)
    {
        ClassScore[i].ShowScore();
    }
    return 0;
}

其一组数据的运行结果为:

输入:

2022001 80 79

2022002 90 85

2022003 70 55

输出:

The Score are:

2022001 159

2022002 175

2022003 125

动态对象 指编程者随时动态建立并可随时消失的对象

建立动态对象采用动态申请内存的语句new,删除动态对象使用delete,动态对象存储从申请空间

建立/删除一个动态对象的格式为:

对象指针=new 类名;/delete 对象指针;

 

 (上图为例子,完整程序在上面),注意delete删除的是指针所指的对象。

建立/删除一个动态对象数组的格式为:

对象指针 = new 类名[数组大小]; / delete [] 对象指针;

普通对象数组改用动态对象数组的示例 

Score ClassScore[3];——>Score *ClassScore;ClassScore=new Score[3];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值