提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
类(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
{public:
void 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;
}
注:
主函数中做的事:
- 定义对象
- 调用有关对象的成员函数