2021.11.04

类(class)

类是一种用户自定义的类型,包含函数与数据的特殊“结构体”,扩充c++语言的类型体系。

类中包含的函数,称为”成员函数“;包含的数据,称为”数据成员“。

类中函数既可以在类中给出定义,也可以在类外给出定义。

类的成员(数据,函数)可以根据需要分组,不同组设置不同的访问权限。

权限种类:public(公有属性),private(私有属性),protected(保护属性)。用类来定义变量,该变量通常被称为”对象“。

通过”对象名.成员名“的形式,可以使用对象的数据成员,或者调用对象的成员函数,但仅限于public权限的成员。

在类外定义成员函数时,函数名前要加上类名限定,格式为: 类名::函数名,其中::称为域运算符。

成员函数的两种定义方式

在类内定义成员函数

#include<iostream>
using namespace std;
class Matrix{
	
public: 
	void fill(char dir){
	
	}
};
int main(){
	return 0;
}

 在类外定义成员函数

#include<iostream>
using namespace std;
class Matrix{
    int data[100][100];//缺省属性为private
	public:
		void fill(char dir);
};
void Matrix::fill(char dir){
	
}
int main(){
	return 0;
} 

this指针

        在所有成员函数中,隐含着一个只想当前对象的指针变量,其名称为this

#include<iostream>
using namespace std;
class Matrix{
	int data[100][100];
public: 
	void fill(char dir){
		this->data[0][0]=1;
	}
};
int main(){
	
	return 0;
}

访问对象的成员(数据,函数)不允许用"."操作符访问对象的私有成员和保护对象,对象只能访问它的公有属性的成员(数据,函数)。

对指针采用"->"操作符访问所指对象的公有成员。

友元函数 

有时候需要允许某些函数访问对象的私有成员,可以通过声明该函数为类的"友元"来实现

#include<iostream>
using namespace std;
class Test{
	int id;
public:
	friend void print(Test obj);
};
void print(Test obj){
	cout<<obj.id<<endl;
}
int main(){
	Test obj;
	print(obj);	
	return 0;
}
//Test类中声明了Test类的友元和函数print
//该函数在实现是可以访问Test类定义的对象的私有成员 如int id 

构造函数

        类的构造函数由编译器自动生成调用语句,用于对象数据成员的初始化,以及其他初始化工作。构造函数没有返回值类型,函数名与类名相同。类的构造函数可以重载,即可以使用不同的函数参数进行对象初始化。

#include<iostream>
using namespace std;
class Student{
	long long ID;
public:
	Student(long long id){
		ID=id;
	}
	Student(int year,int order){
		ID=year*10000+order;
	}
};
int main(){
	
	
	return 0;
}

不带任何参数的构造函数被称为”默认构造函数“,也称为”缺省构造函数“。

在定义元素为对象的数组时(ClassName array_var[NUM];),类必须提供默认构造函数的定义。使用构造函数(没有参数)来生成对象时,对象定义的格式为ClassName obj;

构造函数可以使用初始化列表来初始化成员函数。

该列表在定义构造函数时使用,位置出现在函数体花括号"{"之前,函数参数列表"()"之后,以冒号":"作开头。

使用”数据成员(初始值)“的形式

#include<iostream>
using namespace std;
class Student{
	long long ID;
public:
	Student(long long id) :ID(id){}
	Student(int year,int order){
		ID=year*10000+order;
	}
};
int main(){
	return 0;
}

委派构造函数

        在构造函数的初始化列表中,还可以调用其他构造函数的函数。

#include <iostream>
using namespace std;
class Info{
	public:
		Info(){Init();}
		Info(int i):Info(){id=i;}
		Info(char c):Info(){gender=c;}
	private:
		void Init(){};
		int id=2016;
		char gender='M';	
};
int main(){
	
}

析构函数:

        一个类只有一个析构函数,名称时"~ClassName",没有函数返回值,没有函数参数。编译器在对象生命周期结束时自动调用类的析构函数,以便释放对象占用的资源,或其他后处理。

#include<iostream>
using namespace std;
class ClassRoom{
	int num;
	long* ID_list;
public:
	ClassRoom():num(0),ID_list(0){};
	~ClassRoom(){//析构函数 
		if(ID_list) delete[] ID_list;//释放内存 
	}
};
int main(){
	
	return 0;
} 

拷贝构造函数

        函数调用时以类的对象为形参或返回类对象时,编译器会生成自动调用”拷贝构造函数“,在已有对象基础上生成新对象。拷贝构造函数是一种特殊的构造函数,它的参数是语言规定的,是同类对象的常量引用。语义上:用参数对象的内容初始化当前对象。

#include<iostream>
using namespace std;
class Person{
	int id;
public:
	Person(const Person& src){
		id=src.id;
	}
};
int main(){
	return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值