C++类与对象简介

类的基本概念及基本语法

类的概念

  • 一个类别、数据类型—万物皆对象
  • 以手机为例子,每个手机都是一个物体,所有手机构成的集合叫做类,其中具体的一个物体,叫做对象
  • 属性:亮度、电量、运营商…
  • 方法:开关机、调整亮度、发送短信…
  • 在执行一个方法时,要指定一个特定的对象
  • 类的实例化:当我们定义一个类的概念时,我们会定义这个类有许多特征,当某个东西满足这些特征时,我们可以说,这个东西属于这个类,那么这个东西就是这个类的实例。
    在这里插入图片描述

与结构体的比较

//定义了一个cp(cellphone)的结构体
struct cp{
	int electricity;
	int brightness;
	str operators;
	};
//我们可以定义一个结构体变量
cp mycp;

可以暂时理解为,类就是增加了函数的结构体。

类的定义和使用

定义类

class Rectangle{
	public:
		int w,h;
		int Area(){
			return w*h;
		}
		int Perimeter(){
			return 2*(w+h);
		}
		void Init(int w_,int h_){
			w=w_;h=h_;
		}
	};

使用类

#include<iostream>
using namespace std;

int main(){
	int w,h;
	Rectangle r;//r是一个对象
	cin>>w>>h;
	r.Init(w,h);
	cout<<r.Area()<<endl<<r.Perimeter();
	return 0;
}

完整代码

#include<iostream>
using namespace std;

class Rectangle{
	public:
		int w,h;
		int Area(){
			return w*h;
		}
		int Perimeter(){
			return 2*(w+h);
		}
		void Init(int w_,int h_){
			w=w_;h=h_;
		}
	};
	
int main(){
	int w,h;
	Rectangle r;//r是一个对象
	cin>>w>>h;
	r.Init(w,h);
	cout<<r.Area()<<endl<<r.Perimeter();
	return 0;
}


输入:
3 4
输出:
12
14

使用类的3种方式

1.对象名.成员名

例如:

Rectangle r1,r2;
r1.w=5;r2.Init(5,4);
2.指针->成员名

例如:

Rectangle r1,r2;
Rectangle *p1=&r1,*p2=&r2;
p1->w=5;p2->Init(5,4);
3.引用名.成员名

例如:

Rectangle r;
Rectangle &rr=r;
rr.w=5;rr.Init(5,4);

经检验
cout<<r.Area()<<endl<<r.Perimeter();
和
cout<<rr.Area()<<endl<<rr.Perimeter();
的输出没有任何区别
引用名只是给原对象换了个名字,两个其实是一个东西

声明、定义分离

可以在类中声明,然后在类外定义函数

class Rectangle{
	public:
		int w,h;
		int Area();
		int Perimeter();
		void Init(int w_,int h_);
};
int Rectangle::Area(){return w*h;}
int Rectangle::Perimeter(){return 2*(w+h);}
void Rectangle::Init(int w_,int h_){w=w_;h=h_;}

访问权限

类型性质
private私有成员,只能在成员函数中访问
public公有成员,可以在任何地方访问
protect保护成员,涉及到继承和派生,暂不做介绍
class className(){
	private:
		私有属性和函数
	public:
		公有属性和函数
	protect:
		保护属性和函数
};

默认函数

默认方法

class cellphone{
	public:
		//构造函数和构析函数 
		cellphone();
		~cellphone();
		//可以被复制
		cellphone(const cellphone&);
		cellphone&operator=(const cellphone&);
		//可以取地址
		cellphone * operator&();
		const cellphone* operator&() const;
	private:
		int electricity;
};

特殊成员-this指针

  • 并非对象的成员,是常量指针
  • 每个对象可以用this指针访问自己的地址
  • 非static成员函数调用时,this指针为隐式参数
  • 用途:防止自赋值、返回以连续调用
class Complex{
	float real,imag;//默认为private
	public:
		Complex * ReturnAdress(){
			return this;
		}//c.ReturnAdress()等效于&c
		float ReturnReal(){
			return this->real;//等效于return real 
		} 
};

模板函数与模板类

函数模板

实际问题中的需要,例如:对不同类型数据可用的排序函数sort

template<class T>
return-type sort(...T...)

一个有用的输出函数:

#include<iostream>
using namespace std;

template<class T>
void print(const T array[],int size){
	int i;
	for(i=0;i<size;i++)cout<<array[i]<<"\t";
	return;
}
int main(){
	int a[10];
	for(int i=0;i<10;i++)
		scanf("%d",&a[i]);
	print(a,10);
}

/*
输入为:
1 2 3 4 5 6 7 8 9 10
输出为:
1       2       3       4       5       6       7       8       9       10

一个实际的输出函数:

template<class T1,class T2>
void print(T1 arg1,T2 arg2,string s,int k){
	cout<<arg1<<s<<arg2<<k<<endl;
	return;
}

类模板

  • 为了多快好省地定义出一批相似的类,可以定义类模板,然后由类模板生成不同的类。
  • 数组是一种常见的数据类型,元素可以是:
    • 整数
    • 字符串

类模板:在定义类的时候给它一个/多个参数,这个/这些参数表示不同的数据类型。在调用类模板时,指定参数,由编译系统根据参数提供的数据类型自动产生相应的模板类。

类模板的定义

template<class T>
class Carray{
	T *ptrElement;
	int size;
public:
	Carray(int length);
	~Carray();
	int len();
	void setElement(T arg,int index);
	T getElement(int index);
};

使用类模板声明对象

Carray<int> arrayInt(50),*ptrArrayInt;
/*
声明一个元素类型为int的Carray模板类,
并声明该模板类的一个对象、以及一个指针
*/

【注】不同模板参数产生的模板类,不是同一个类,无法调用对方的私有成员

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值