一、基本概念
类就是对现实世界中的具有相同属性对象的抽象描述;一般包括属性和方法;分为基类(子类)和派生类。
二、类的定义
class 类名 {
public:
//公有的属性和行为
private:
//私有的属性和行为
};
需要注意的点:
1) 类名需要遵循一定的命名规则;
2)public和private是属性和行为的关键字;一般类的属性成员应设置为private;public只留给那些外界用来调用的函数接口;
3)末尾分号不能丢。
实例分析
class Point {
private:
int xPos;
int yPos;
public:
void set_point(int x, int y);
void show_point();
};
需要注意的是:
1)类的数据成员不能被auto、extern、register等进行修饰,也不能在定义时初始化,如int x=0;//错误
2)类定义时public和private没有先后之分;
3)末尾分号不能丢;
三、C++类的实现
前面类的定义实例中,我们只是完成对类的一些属性和方法的声明,并没有去实现它,类的实现就是完成其方法的过程。类的实现有两种方式,一种是在类定义时完成对类成员函数的定义,另一种是在类定义的外部进行完成。
1)在类定义时定义成员函数
/* 定义一个Point 类 设置初值并输出*/
#include <iostream>
using namespace std;
class Point {
private:
int xPos;
int yPos;
public:
void set_point(int x, int y) {
xPos = x;
yPos = y;
}
void show_point() {
cout<<"x = "<<xPos<<endl;
cout<<"y = "<<yPos<<endl;
}
};
int main (void) {
Point point1;
point1.set_point(10,20);
point1.show_point();
return 0;
}
与类的定义相比,在类内实现成员函数不再是在类内进行声明,而是直接将函数进行定义,在类中定义成员函数时,编译器默认会争取将其定义为inline型函数。
2)在类外部定义成员函数
在类外定义成员函数通过在类内进行声明,然后在类外通过作用域操作符::进行实现,形式如下:
返回类型 类名::成员函数名(参数列表) {
//函数体;
}
实例中的代码改为外部定义为:
/* 定义一个Point 类 设置初值并输出*/
#include <iostream>
using namespace std;
class Point {
private:
int xPos;
int yPos;
public:
void set_point(int x, int y);
void show_point();
};
void Point::set_point(int x, int y) {
xPos = x;
yPos = y;
}
void Point::show_point() {
cout<<"x = "<<xPos<<endl;
cout<<"y = "<<yPos<<endl;
}
int main (void) {
Point point1;
point1.set_point(10,20);
point1.show_point();
return 0;
}
四、C++类的使用
将一个类定义和实现之后,就可以用该类创建对象了。
Point point1;
//创建一个类的对象称为该类的实例化。
将类进行实例化之后系统才会根据该对象的实际需要分配一定的存储空间。这样就可以使用该对象来访问或调用该对象所能提供的属性和方法了。通过 对象名.公有函数名(参数列表);的形式就可以调用该类对象所具有的方法,通过对象名.公有数据成员的形式可以访问对象中的数据成员。
五、对象的作用域、可见域与生存周期
类对象的作用域、可见域以及生存周期与普通变量的保持相同,当对象生存周期结束时对象将自动撤销,所占用的内存被回收,需要注意的是,如果对象的成员函数中有使用new或者malloc申请的动态内存程序不会对其进行释放,需要我们手动进行清理,否则会造成内存泄露。
类的应用——Google笔试题练习
/*长度为n的数组乱序存放着0至n-1,现在只能进行0与其他数的swap 请设计并实现排序;*/
/*
*思路分析:需求 1 数组 初始化 排序
需求 2 排序时只能用0进行交换
*/
#include <iostream>
using namespace std;
void swap(int* myarray,int a, int b);
class Array {
private:
int* myArray;
int size;
public:
void set_value(int* array, int n) {
size = n;
myArray = new int[size];
for (int i=0; i<n; i++)
myArray[i] = array[i];
}
~Array() {
delete []myArray;
return;
}
void sort_array() {
for (int i = 0; i<size; i++) {
if (myArray[i] == 0) {
int temp;
temp = myArray[0];
myArray[0] = myArray[i];
myArray[i] = temp;
break;
}
}
for (int j=1; j<size; j++) {
if (myArray[j] == j)
j++;
else {
int tar = myArray[j];
swap(myArray,0,tar);
swap(myArray,tar,j);
swap(myArray,j,0);
}
}
}
void show_array() {
for (int i=0; i<size; i++)
cout<<myArray[i]<<" ";
cout<<""<<endl;
}
};
int main (void) {
Array array1;
int exam[10] = {2,3,1,6,5,0,4,9,7,8};
array1.set_value(exam,10);
array1.sort_array();
array1.show_array();
return 0;
}
void swap(int* myarray,int a, int b) {
if (a == b)
return;
else {
int temp;
temp = myarray[a];
myarray[a] = myarray[b];
myarray[b] = temp;
}
}