类与对象

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


类(class)

类是对象的抽象,而对象是类的具体实例。

实例

class student     //以class开头,类名为student
  {int num;
  char name[20];
  char sex;        //以上三行是数据成员
  void display()
    {cout<<"num"<<num<<endl;
    cout<<"name"<<name<<endl;
    cout<<"sex"<<sex<<endl;
    }
  };
  student stud1,stud2;    //定义了两个student类的对象

如果在类里不指定private或public,则默认是私有的

归纳总结以上可得一般形式为


class 类名
   {private:
       私有的数据和成员函数;
    public:
       公用的数据和成员函数;
    }

定义对象

  • 先声明类类型,然后再定义对象`(同上的实例)
    • 在声明类的同时定义对象{ …}stud1,stud2;

成员函数

class student    //以class开头,类名为student
  {publicvoid display();    //公用成员函数原型声明                              
  int num;
  char name[20];
  char sex;
  };
  void student ::display()     //**在类外定义display类函数**
    {cout<<"num"<<num<<endl;    //函数体
    cout<<"name"<<name<<endl;
    cout<<"sex"<<sex<<endl;
    }
  student stud1,stud2;         // 定义两个对象
  • 在类外定义函数时,必须在函数名前面加上类名,“::”是作用域限定符,用它声明函数属于哪一个类
  • 在类外定义函数,必须在类体中作原型声明(如上)
内置成员函数
  • 在调用这些函数时并不是真正地执行函数调用过程,而是把函数代码嵌入程序的调用点。大大减少调用成员函数的时间开销。
  • 在类内定义,可以省略inline,而在类外系统并不默认为内置函数,因此在类外为
    inline void student::display()
    inline函数只影响程序的执行效率,与成员函数是否占用对象的储存空间无关
成员函数存储方式
  • 同一类的不同对象中的数据成员的值一般不同,而代码相同
  • 对象所占的空间的大小只取决于该对象中数据成员所占的空间

对象成员的引用

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

"."是成员运算符,指明访问哪一个对象的成员。
一般形式为
对象名.成员名stud1.sum=1001;

(2)通过指向对象的指针访问对象中的成员
class Time
   {public:
   int hour;
   int minite;
   };
   Time t,*p;  //定义对象他,指针变量p
   p=&t;     //使p指向对象t
   cout<<p->hour;

p->hour 表示p当前指向的对象中的成员hour,和(*p).hour等价

(3)通过对象的引用来访问对象中的成员
Time t1;   //定义对象t1
Time&t2=t1; //定义time类引用t2,并使之初始化为t1
cout<<t2.hour;  //输出对象t1中的成员hour

类和对象的简单应用

例1 用类来实现输入和输出时间(时:分:秒)

#include<iostream>
using namespace std;
class Time
   {
   	public:  //声明time类
   	int hour;   //数据成员为公用的
   	int minute;
   	int sec;
	} ;
int main()
   {
   	Time t1;
   	cin>>t1.hour;
   	cin>>t1.minute;
   	cin>>t1.sec;
   	cout<<t1.hour<<":"<<t1.minute <<":"<<t1.sec <<endl;
	   return 0; 
   }

注:不要错写为类名,如Time.hour,因为类是一种抽象的数据类型,并不是一个实体,不占存储空间,而对象是是实际存在的实体,其数据成员是有值的,可以被引用。

例2 用函数来进行输入和输出(用于多个对象,避免程序冗长)

#include<iostream>
using namespace std;
class Time
   {
   	public:
   	 int hour;
   	 int minute;
   	 int sec;
   };
int main()
{
	void set_time(Time&);
	void show_time(Time&);
	Time t1; 
	set_time(t1);
	show_time(t1);
	Time t2;
	set_time(t2);
	show_time(t2);
	return 0;
}
void set_time(Time&t)
{
	cin>>t.hour;
	cin>>t.minute;
	cin>>t.sec;
 } 
void show_time(Time&t) //形参t是引用变量 
{
	cout<<t.hour<<":"<<t.minute<<":"<<t.sec<<endl;
}

也可以在调用函数时由实参给出,并在函数中使用默认参数
void set_time(Time&,int hour=0,int minute=0,int sec=0);//函数声明指定了默认参数

例3 将上个例题用含 成员函数 的类来处理

#include<iostream>
using namespace std;
class Time
{
	public:
		void set_time();//公用成员函数 
		void show_time();
	private:
		int hour;
		int minute;
		int sec;
 } ;
int main()
{
	Time t1;
	t1.set_time();
	t1.show_time();
	Time t2;
	t2.set_time() ;
	t2.show_time() ;
	return 0;
}
void Time::set_time() //在类外定义函数 
{
	cin>>hour;
	cin>>minute;
	cin>>sec;
}
void Time::show_time() 
{
	cout<<hour<<":"<<minute<<":"<<sec<<endl;
}

注:t1.display()和t2.display()虽然调用同一个函数,但结果不同。t1.display()只能引用对象t1中的数据成员。

例4 找出整型数组中的元素的最大值

#include <iostream>
using namespace std;
class Array_max
{
	public:
		void set_value();//声明类 
		void max_value();
		void show_value();
	private:
		int array[10];
		int max;
};
void Array_max::set_value() 
{
	int i;
	for(i=0;i<10;i++)
	cin>>a[i];
}
void Array_max::max_value() 
{
	int i;
	max=array[0];
	for(i=0;i<10;i++)
	if(array[i]>max)max=array[i];
}
void Array_max::show_value() 
{
	cout<<"max="<<max<<endl;
}
int main()
{
	Array_max arrmax;//定义对象 
	arrmax.set_value() ;
	arrmax.max_value() ;
	arrmax.show_value() ;
	return 0;
}

注:
主函数中做的事:

  • 定义对象
  • 调用有关对象的成员函数
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值