c++学习总结(三)——类与对象

一、心得感悟

    c语言的课程学习后,开始c++的学习,首先就是学习类。在学习类时,类的使用与c语言有着极大的差别,一开始学习十分别扭。c语言的学习直接定义几个形参、函数就可以写程序了;而到了c++学习,关于类,首先必须定义类。具有相同性质和功能的东西构成的集合,通常归成一“类”。例如,“人”是类的概念。为了描述人的特点,有姓名、性别、年龄、身高、体重等特征,称为“属性”。人还有各种生活技能和工作技能,称为“方法”。类是抽象的,当属性赋给具体的值,方法有具体的内容时,才成为对象,如具体的张三、李四。对象时某个类的能动实体。

    类的定义包括行为和属性两个部分,属性以数据表示,行为通过函数实现。类的实例称为对象,正如基本数据类型的实例称为变量一样,在程序设计中,“变量”与“对象”两个属于常常可以互换使用。在面向对象程序设计中,程序的基本单位时类。类时用户定义的数据和操作这些数据的函数的封装。类的对象使用自己的方法完成对数据的操作。c++中,属性用数据的储存结构实现,称为类的数据成员;方法用函数实现,称为成员函数。它们都是类的成员。使用对象包括访问对象的数据成员和调用成员函数。类中的成员函数可以使用自身不同性质的数据成员和调用成员函数。

    总之,学习c++,类是最重要的,没有之一。不会定义和使用类,在今后的学习可能会寸步难行。

二、内容总结及例题与分析

1.1. 首先定义类的说明语句一般形式为:

class<类名>

{

    public:

        公有段数据成员和成员函数;

    protected:

        保护段数据成员和成员函数;

    private:

        私有段数据成员和成员函数;

};←分号不得省略!

    类成员用关键字指定不同的访问特征,决定其在类体系中或类外的可见性。

    关键字private用声明私有成员。私有成员只能在类中可见,不能在类外或派生类中使用。

    protected声明保护成员。保护成员在类和它的派生类中可见。

    pulibc声明共有成员。共有成员是类的接口,在类中和类外可见。

例如:

class Date
{
    public:
        void SetDate(int y,int m,int d);
        int IsLeapYear();
        void PrintDate();
    private:
        int year,month,day;

};

Date类有三个私有数据成员:year,month,和day。

    另外,Date还有三个共有成员函数:SetDate函数是用于获取对象的值,设置日期;函数IsLeapYear用于判断是否闰年:PrintDate函数用于输出日期。在类的说明语句中没有给出函数的实现。

    成员函数在类外定义使用作用域区分符进行说明,此时函数头的形式为:

        返回类型    类型::函数名(参数名)

其中,作用域区分符由两个冒号构成,它用于标识属于什么类的成员。

Date类的成员函数定义在类外写为:

void Date::SetDate(int y,int m,int d)
{
    year=y;
    month=m;
    day=d;
}
int Date::IsLeapYear()
{   return(year%4==0&&year%100!=0)||(year%400==0);  }
void Date::PrintDate()

{   cout<<year<<"."<<month<<"."<<day;   }

    简单的成员函数实现可以在类中定义,此时,编译器作为内联函数处理。例如,成员函数SetDate在类中写成:

    public:
    void SetDate(int y,int m,int d)
    {
        year=y;
        month=m;
        day=d;

    }

    成员函数有两个作用:一是操作数据成员,包括访问和修改数据成员;二是用于协同不同的对象操作,称为传递消息。成员函数通过参数与其它对象协同操作。

    对象是类类型的变量,说明方法与普通变量相同。对象没有成员函数的副本,类成员函数可以被对象调用。

    类的数据成员除了可以是基本类型外,还可以是数组、结构、类等自定义的数据类型。如果一个类的成员是一个已经定义的类类型,则称为类的包含(或组合)。例如,定义Student类:

class Student
{   public:
        char name[10];
        Date birthday;
        long code;
        char *address;
        char phone[20];
    //...    

};

1.2. 访问对象成员

    使用对象包括访问对象的数据成员和调用成员函数。类中的成员函数可以使用自身不同性质的数据成员和调用成员函数。公用成员是提供给外部的接口,即,只有公用成员在类体系外可见。对象成员的访问形式与访问结构的形式相同,运算符“.”和“->”用于访问对象成员。

例:1.访问对象的公用成员。

#include<iostream>
using namespace std;
class Tclass
{   public:
        int x,y;
        void print()
        {  cout<<x<<"."<<y; };
};
int main()
{
    Tclass test;
    test.x=100;//访问共有段数据成员
    test.y=200;
    test.print();//调用共用段成员函数

}

2.用指针访问对象成员。

#include<iostream>
using namespace std;
class Tclass
{   public:
        int x,y;
        void print()
        {  cout<<x<<"."<<y; };
};
int add(Tclass *ptf)
{   return(ptf->x+ptf->y);  }
int main()
{
    Tclass test,*pt=&test;//说明一个对象test和对象指针pt
    pt->x=100;            //用对象指针访问数据成员
    pt->y=200;
    pt->print();          //用对象指针调用成员函数
    test.x=150;
    test.y=450;
    test.print();
    cout<<"x+y="<<add(&test)<<endl;//把对象地址传给指针参数

}

1.3.this指针

    需要显式引用this指针的三种情况

(1)在类的非静态成员函数中返回类对象本身或对象的引用的时候,直接使用return *this,返回本对象的地址是,return this。

(2)当参数与成员变量名相同时,如this->x=x,不能写成x=x。

(3)避免对同一对象进行赋值操作,判断两个对象是否相同时,使用this指针。

函数返回对象的引用

#include<bits/stdc++.h>
using namespace std;
class Person
{
    public:
        Person(string n,int a)
        {
            name=n;             //这里的name等价于this->name
            age=a;              //这里的age等价于this->age
        }
        int getage(void)const{return age;}
        Person& addage(int i){age+=i; return *this;}
    private:
        string name;
        int age;
};
int main()
{
    Person Li("Li",20);
    cout<<"Li age ="<<Li.getage()<<endl;
    cout<<"Li add age ="<<Li.addage(1).getage()<<endl;//增加岁的同时,可以对新的年龄直接输出;
    return 0;
}
程序执行结果为:
Li age=20

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值