类与对象

对象

一个班级作为一个对象时有两个要素:一是班级的静态特征,如班级所属系和专业,学生人数,所在的教室等,这种静态特征称为属性;二是班级的动态特征,如学习、开会等,这种动态特征称为行为(或功能)。任何一个对象都应当具有两个要素,即属性和行为。对象是由一组属性和一组行为构成的。

类和对象的关系

类是对象的抽象,而对象是类的具体实例。好比建造房屋先要设计图纸,然后按图纸在不同的地方建造若干栋同类的房屋。可以说类是对象的模板,是用来定义对象的一种抽象类型。
类是抽象的,不占用内存,而对象是具体的,占用储存空间。

声明类类型

类是用户建立的类型。如果程序中要用到类类型,必须自己根据需要进行声明,或者使用别人已设计好的类。下面是我们已熟悉的声明一个类类型:

class Student
{ 
int num;	
char name[20];
char sex;
void display()
	{
		cout<<"num:"<<num<<endll;
		cout<<"name:"<<name<<endll;
		cout<<"sex:"<<sex<<endll;
	}
};

class是声明类时必须使用的关键字,类体是用一对花括号括起来的。类的声明以分号结束。
在类体中是类的成员表,列出类中的全部成员。除了数据以外,还包括对这些数据操作的函数。
成员访问限定符:public:公用的,既可以被本类中的成员函数所引用,也可以被类的作用域的其他函数所引用。
private:私有的,只能被本类中的成员函数引用,类外不能调用(友元类除外)。
protected:受保护的,不能被类外访问,但可以被派生类的成员函数访问。

定义对象的方法

1.先声明类类型,然后再定义对象

Student stu1,stu2;

2.声明类的同时定义对象

class Student
{ 
punlic:
int num;	
char name[20];
char sex;
void display()
	{
		cout<<"num:"<<num<<endll;
		cout<<"name:"<<name<<endll;
		cout<<"sex:"<<sex<<endll;
	}
}stu1,stu2;

类的成员函数

成员函数的性质

它与一般函数的区别为:它是属于一个类的成员,出现在类体中。它可以被指定为public,protected,和private。

在类外定义成员函数
void Student::display()
	{
		cout<<"num:"<<num<<endll;
		cout<<"name:"<<name<<endll;
		cout<<"sex:"<<sex<<endll;
	}

成员函数在类外定义时,必须在函数名前面加以类名,予以限定符::

内置成员函数
成员函数的储存方式

不论成员函数在类内还是类外定义,成员函数的代码段的储存方式是相同的,都不占用对象的储存空间。

对象成员的引用

通过对象名和成员运算符访问对象中的成员

访问对象中成员的一般形式为:
对象名.成员名
如;stu1.display();

通过指向对象的指针访问对象中的成员

如:
Time t,*p; p=&t; cout<<p->hour;

通过对象的引用来访问对象中的成员

如果为一个对象定义了一个引用,那么它就是对象的“别名”。
如:Time t1; Time &t2=t1; cout<<t2.hour;

利用构造函数对类对象进行初始化

不能在类声明中对数据成员初始化,因为类并不是一个实体,而是一种抽象类型,并不占储存空间,显然无处容纳数据。
可以用构造函数处理对象的初始化,其名字与类名同名。

class time
{
	public:
		time({
			hour=0;
			minute=0;
			sec=0;
		}
	private:
		int hour;
		int minute;
		int sec;
};

在建立对象时自动调用构造函数。
带参数的构造函数:

class time
{
	public:
		time(int h,int m,int s)
		{
			hour=h;
			minute=m;
			sec=s;
		}
	private:
		int hour;
		int minute;
		int sec;
};

析构函数

它的作用与构造函数相反,它的名字是类名前加一个“~”符号。

  • 自动局部对象:函数调用结束时,对象释放前自动执行析构函数。
  • 静态局部对象:只在main函数或调用exit函数结束程序时,才调用static局部对象的析构函数。
  • 全局对象:在程序的流程离开其作用域时,才调用其析构函数。
  • new运算符动态建立的对象,当用delete运算符释放该对象时,先调用该对象的析构函数。
    先构造的后析构,后构造的先析构。

对象数组

数组不仅可以由简单变量组成,也可以由类对象组成。(数组中的每一个元素都是类的对象),此时可以用下标来操作数组中的对象。

对象指针

就像结构体有指向结构体变量的指针一样,类也有指向类对象的指针。

  • 指向对象的指针
  • 指向对象成员的指针
  • this指针:每一个成员函数都有一个this指针,指向本类对象,它的值是当前被调用的成员函数所在的对象的起始地址。

静态成员

某时人们希望某一个数据成员为全体对象所共有,这时可以用静态的数据成员

  • 静态的数据成员:静态的数据成员在内存中只占一份空间,由全体对象共用。
    如:static int c=10;可以初始化,但是只能在声明中初始化。静态数据成员既可以用对象名来引用,也可以用类名来引用
    -静态成员函数:和静态数据成员一样,静态成员函数也是类的一部分,如果在类外调用静态成员函数,有两种形式:
    • ` 类名::函数名();
    • 对象名.函数名();
      静态成员函数没有this指针,主要用来访问静态数据成员。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值