内容
- 类和对象的定义
- 构造函数和析构函数
- 内联函数和外联函数
- 成员函数的重载
- this指针
累积了很多周的网课笔记,脑壳疼,po在知乎上方便复习啦。
一 类和对象的定义
1 类和对象的定义形式
1)
class <类名>
{
[ [private:] //私有成员,缺省存取权限
<数据成员及成员函数 > ]
[ public: //公有成员
<数据成员及成员函数 > ]
[ protected: //保护成员
<数据成员及成员函数 > ]
};
注:
私有成员:只允许类内成员函数存取它
公有成员:允许类内和类外函数存取它
保护成员:允许类内和其派生类函数存取它
例:
定义描述一个人的类 Person,源程序文件名为Person.h
#include <iostream>
#include <string>
using namespace std;
class Person
{
private: // 此处,private可缺省
char Name[20]; //姓名
char Sex; //性别,三个数据成员
int Age; //年龄
public: // 以下定义了四个成员函数
void SetData(char n[ ], char s, int a)
{
strcpy(Name, n); //直接访问Name
Sex=s; //直接访问Sex 访问特性
Age=a; //直接访问Age
}
void GetName( char *n ) // 函数
{
strcpy(n, Name);
}
char GetSex( ) // 函数
{
return Sex;
}
int GetAge( ) // 函数
{
return Age;
}
}; // 注意:类定义结束处的分号不能少
2)
类是一种类型,该类型的变量称为对象(实例)
对象的定义:
<类名> <对象列表>;
例:
Person a, b ; // 定义a、b两个对象
Person *pa, *pb, x[10]; // pa和pb是两个Person类型指针, x是对象数组
2 对象成员的访问
![e30b66b23cea36afbeedf338526e88be.png](https://i-blog.csdnimg.cn/blog_migrate/b636698272e26b0d36816e1a5382d31b.jpeg)
3 成员函数的定义
1)在类体内定义成员函数
见上
2)在类体外定义成员函数
#include <iostream> //程序文件名为Person.h
#include <string>
using namespace std;
class Person
{
char Name[20]; //姓名 //注意缺省 private
char Sex; //性别
int Age; //年龄
public:
void SetData(char [ ], char , int );
void GetName(char *);
char GetSex( );
int GetAge( );
};
void Person::SetData(char n[ ], char s, int a)
{
strcpy(Name, n);
Sex=s;
Age=a;
}
void Person::GetName( char *n )
{
strcpy(n, Name);
}
char Person::GetSex( )
{
return Sex;
}
int Person::GetAge( )
{
return Age;
}
3)主函数
#include "Person.h" //包含1)或2)中的头文件
using namespace std;
void main( )
{
Person a, *pa;
char name[20];
//以下通过对象访问成员
a.SetData("Cheng", 'F', 20);
a.GetName(name);
cout << "Name: " << name <<endl;
cout << " Sex: " << a.GetSex( ) << endl;
cout << " Age: " << a.GetAge( ) << endl;
//以下通过指针访问成员
pa=&a;
pa->SetData("Zhang", 'M', 18);
pa->GetName(name);
cout << "Name: " << name <<endl;
cout << " Sex: " << pa->GetSex( ) << endl;
cout << " Age: " << pa->GetAge( ) << endl;
}
4 对象的存储空间
对象存储空间的分配和撤销是系统根据对象的作用域自动完成的,即进入对象作用域时,系统自动为对象分配空间;退出对象作用域时,系统自动撤销对象空间。
系统为每个对象分配储存空间,用于存放该对象具体的数据成员值。所有对象的成员函数的代码是相同的,因此系统将成员函数的存储空间处理成该类的所有对象共享同一代码空间。因此一个对象的存储空间是对象自身数据成员的存储空间。
例:
Person a, b, *pa=&a, *pb=&b;
a.SetData("Cheng", 'F', 20);
b.SetData("Zhang", 'M', 18);
![6cc6058531b8fe865fbd96e02598705c.png](https://i-blog.csdnimg.cn/blog_migrate/1c4dfd74dd6dfdcba8f6c78589118a99.png)
5 说明
1)类中数据成员的类型可以是任意的,但自身类的对象不可以作为成员。
class Person
{
char Name[20];
char Sex;
int Age;
Obj obj1, obj2; // 可以
Person a, b; // 不可以
Person *pa; // 可以
......
};
2) 若类的使用在前,定义在后,则需引用性说明。