C++学习笔记2--类和对象1
一、类的声明和对象定义
1、关系
在C++中对象的类型称为类(class),类代表了某一批对象的共性和特征。类是对象的抽象,而对象是类的具体实例,也可以说类是对象的模板,是用来定义对象的一种抽象类型。
类是抽象的,不占用内存,而对象是具体的,占用存储空间。
2、声明类
对类的声明一般形式为:
class 类名
{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;
};
被声明为私有private成员,只能被本类中的成员函数引用;被声明为公用public成员,还可以被类作用域内其他函数引用。
*一个类体重可以包含多个private和public。
3、定义对象
(1)先声明类型,再定义对象
a、class 类名 对象名
这种方法是继承了C的传统
*b、类名 对象名
这种是C++的特色
class 类名
{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;
};
类名 stud1,stud2;//定义两个该类类型的对象
(2)声明类型的同时定义对象
class 类名
{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;
}stud1,stud2;//定义两个该类类型的对象
4、类与结构体的异同
C++必须兼容C,可以使用struct来代替class定义类。用struct定义的结构体类型实际上也就是类类型。
struct 类名
{private:
私有的数据和成员函数;
public:
公用的数据和成员函数;
}stud1,stud2;//定义两个该类类型的对象
但是
(1)使用struct声明的类,如果对其成员不作private和public的声明,系统默认为public;不具备信息的隐蔽性
(2)使用class声明的类,如果对其成员不作private和public的声明,系统默认为private;
二、类的成员函数
1、性质
类的成员函数,简称类函数,也是函数的一种,主要区别就是引用它时要注意它的作用域,受private和public约束。它可以访问本类中任何成员(包括私有和公用),可以引用本作用域中有效的数据。
2、定义
可以在类体内定义,也可以在类体中只写成员函数的声明,而在类的外面进行函数定义。
在类体外定义时需要在函数名前面加上类名,同时使用作用域限定符或者也叫作用域运算符“::”。
一般这样定义的好处是不仅可以减少类体的长度,使类体清晰,便于阅读,而且有助于把类的接口和类的实现细节分离。
如Student :: display()表示作用域为Student类的display函数。
例:
struct Student
{public:
void display(); //公用成员函数原型声明
private:
int num;
string name;
char sex;
};
void Student::display() //在类外定义display函数
{cout <<"num:"<<num<<endl;
cout<<"name:"<<name<<endl;
cout<<"sex:"<<sex<<endl;
}
Student stud1,stud2;//定义两个类的对象
如果在::前没有类名或者没有::,则表示它为非成员函数的一般函数。、
3、inline成员函数
C++在调用内置inline成员函数时,在调入点将体量小的函数代码嵌入到程序中直接执行,大大降低了调用一般函数的时间开销;在类体内定义的成员函数默认都为内置函数,定义在类体外的成员函数需要在声明时前面加上“inline”做显示声明。
4、存储方式
用类去定义一个对象时,系统会为每一个对象分配存储空间,一个对象所占用的存储空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。
如:
class Time
{public:
int hour;
int minute;
int sec;
void display(); //公用成员函数原型声明
{cin >>a>>b>>c;};
};
使用下面这条代码:
cout<<sizeof(Time)<<endl;
输出值为12;(因为一个整型为4个字节)
三、对象成员的引用
1、通过对象名和成员运算符访问
“.”是成员运算符
访问一般形式:
对象名.成员名
在类外只能访问public成员(包括成员函数),而不能访问private成员。
2、通过指向对象的指针访问
class Time
{public: //数据成员是公共的
int hour;
int minute;
int sec;
void display(); //公用成员函数原型声明
{cin >>a>>b>>c;};
};
Time t,*p;//定义对象t和指向Time类型的指针变量p
p = &t; //使p指向对象t
cout << p->hour;//输出p指向的对象中的成员hour
p->hour (*p).hour t.hour 三者等价
3、通过对象的引用来访问
Time t1; //定义对象t1
Time &t2 =t1; //定义Time类引用变量t2,并初始化为t1
cout << t2.hour;//输出对象t1中的成员hour
};
由于t2与t1共用一个存储单元(即t2是t1的别名),因此t2.hour就是t1.hour。
上一篇: C++类学习笔记
下一篇: C++之共有继承、保护继承、私有继承