标题:类与对象(2)
1.类的定义
类型(type)是一个概念的具体表示。依照OO的理念:如果不
能用内置类型表达一个概念,则我们设计一个新类型去表达
一个概念。
任何一个数据类型都封装两方面的信息:数据 操作
2.类的组成
(1)一组数据成员(data member)
定义了该类对象所共有的属性
(类似于结构体成员)
(2)一组成员函数(member function)
定义了该类对象所共有的操作
(类似于结构体中的函数)
3.一个简单的类举例
Student 类
该类对象所共有的属性
姓名,学号,专业,年级,数学成绩,英语成绩…
该类对象的操作
转专业
跳级/留级
输出每个对象的信息
修改每个对象的信息
等等
利用学生类可以构造一个学生对象。
4.C++类的声明形式
类是一种用户自定义类型,声明形式:
class 类名称
{
public:
公有成员(外部接口)
private:
私有成员
protected:
保护型成员};
注意:(1)类的任何成员都必须指定访问属性。一般
将数据成员定义为私有成员或保护成员,
将成员函数定义为公有成员。
(2)类定义必须以分号“;”结束。
5.c++ 中为什么要定义public, protect, private 三种访问权限?
对于类的成员来说,
有些需要给外面看的,也就是对外接口,那么就是public,如果没有
,那么我们做的工作将是毫无意义的,(别人没法用)。
如果不想让别人知道内部的实现细节,那么就是private,如:
public:
count()
{ mycount();}
private:
mycount();
这样,count是对外的接口,而实现的时候,我们不想让外面知道怎么
实现的,就用private,防止它用mycount。
如果不想让别人知道,想让自己的孩子什么的知道(这里涉及到继
承),那么就可以作为protected
这样,private是自己私有的,protected是可以让孩子知道的,public是公开的。
6.三种访问控制的特点
private:只能由
1.该类中的函数、
2.其友元函数访问。
不能被任何其他访问,该类的对象也不能访问。
protected:可以被
1.该类中的函数、
2.派生类的函数、以及
3.其友元函数访问。
但不能被该类的对象访问。
public:可以被
1.该类中的函数、
2.派生类的函数、
3.其友元函数访问,也可以由
4.该类的对象访问
注意:友元函数包括3种:
设为友元的普通的非成员函数;
设为友元的其他类的成员函数;
设为友元类中的所有成员函数。
6.例子
钟表类
class Clock
{
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
private:
int Hour, Minute, Second;};
如果紧跟在类名称的后面声明私有成员,则关键字private可以省略:
class Clock
{ int Hour,Minute,Second;
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
};
圆类
const float pi=3.14;
class Circle
{
public:
void SetRadius (float r1){r=r1;}
float GetPerimeter(){ return 2*pi*r;}
float GetArea(){ return pi*r*r;}
private:
float r;
};
7.类定义和使用时注意
1.在类的声明中不能对数据成员进行初始化。
比如:错误哦!!!
class Date
{
int d = 1;
int m = 10;
int y = 1949;}
2.类的任何成员都必须指定访问属性,一般将
数据成员定义为私有成员或保护成员,成员函数定义为公有成员。
3.类中的数据成员可以是C++语法规定的任意数据类型,但
不能用存储类型auto、register或extern进行修饰。
4.类的成员可以是其他类的对象,但不能以类自身的对象作为本类的成员。
5.类定义必须以分号“;”结束
6.class与struct的不同:
①class中,成员缺省情况是private。
②struct中,成员缺省情况是public。
8.成员函数
可以在类中说明原型,在类外给出函数体实现,并在
函数名前使用类名加以限定。
将成员函数在类外定义的一般形式是:
返回类型 类名∷成员函数名(参数表)
{
// 函数体
}
也可以直接在类内给出函数体,形成内联成员函数。
允许声明重载函数和带默认形参值的函数。
例如:
class Clock
{
public:
void SetTime(int NewH, int NewM, int NewS);
void ShowTime();
private:
int Hour, Minute, Second;
};
void Clock::SetTime(int NewH, int NewM,int NewS)
{
Hour=NewH;
Minute=NewM;
Second=NewS;
}
void Clock::ShowTime()
{
cout<<Hour<<":"<<Minute<<":"<<Second;}
9.对象
类描述了一类问题的共同属性和行为。
类与对象的关系,如同C++基本数据类型和该类型的变量
之间的关系。
类的对象是该类的实例或实体,即类类型的变量。
类的对象声明形式:
类名 对象名;
例如:
例:
Clock myClock;
跟普通的变量一样,当定义对象时,申请存储空间(编译器
根据类的成员变量的定义分配存储空间)
(1)在声明类的同时,直接
定义对象,即在声明类的右
花括号“}”后,直接写出属
于该类的对象名表。例如:
class Coord {
public:
void setCoord(int,int);
int getx();
int gety();
private:
int x,y;
}op1,op2;
(2)声明了类之后,在使用时再定义对
象,定义的格式与一般变量的定义格
式相同,例如:
class Coord {
//…
};
// …
main()
{
Coord op1,op2;
//;
}
10.类中成员的访问方式
类中成员互访
直接使用成员名
类外访问
使用“对象名.成员名”方式访问 public 属性的成员。
11.对象成员的引用
- 通过对象名和成员运算符访问对象成员
一般形式: 对象名.成员名
例如: stud1.num=100;
stud1.display();
///
class Student
{
public:
int num;
char name[20];
char sex;
public:
void display();}stud1;
在类外只能访问public成员,不能访问private成员。
2.通过指向对象的指针访问对象中成员
一般形式:指针名->成员名
如: student stud1,*p;
p=&stud1;
cout<num;
p->num, (*p).num, stud1.num三者等价.
3.通过对象的引用访问对象中成员
如: student stud1;
student &stud2=stud1;
cout<<stud2.num;