类和对象介绍

一、类

1.类的声明

cpp 复制代码
class Box{//类名
	private://私有成员
		double width,length,height;//长,宽,高 
	public://公有成员
		void init(double l,double w,double h){//初始化 
			length=l;width=w;height=h;
		}
		double S(){//求表面积 
			return (height*length+height*width+length*width)*2;
		}
		double V(){//求体积 
			return height*width*length;
		} 
};

2.对象的实例与使用

cpp 复制代码
#include<iostream>
using namespace std;
class Box{
	private:
		double width,length,height;//长,宽,高 
	public:
		void init(double l,double w,double h){//初始化 
			length=l;width=w;height=h;
		}
		double S(){//求表面积 
			return (height*length+height*width+length*width)*2;
		}
		double V(){//求体积 
			return height*width*length;
		} 
};
int main()
{
	Box b1;//对象的实例
	b1.init(12,13,14);// 通过实例对象调用方法
	cout<<"表面积:"<<b1.S()<<endl;
	cout<<"体积:"<<b1.V()<<endl;
 } 

3.构造函数的定义

类名::类名 (参数列表) [:数据成员初始化列表]

{函数体}

当类中有多个构造函数时,系统会根据对象实例的状态调用构造方法。

当类中没有定义构造函数时,系统会调用默认创建的空参构造函数-类名(){}

构造函数在对象实例时自动调用。

cpp 复制代码
#include<iostream>
using namespace std;
class Box{
	private:
		double length,width,height;
	public:
		Box();//无参数的构造函数 
	    Box(double,double,double);//有参数的构造函数
	    void show();
};
Box::Box()
:length(1),width(1),height(1){}//给数据成员赋值 
Box::Box(double l,double w,double h)
:length(l),width(w),height(h)//相当于length=l;width=w;height=h; 
{ }
void Box::show(){
	cout<<length<<'\t'<<width<<'\t'<<height<<endl;
}
int main()
{
	Box b1;//对象b1未给任何参数,系统自动调用Box()构造方法为其赋值 
	Box b2(1,2,3);//对象b2有参数,系统自动调用Box(double,double,double)构造方法为其赋值
	b1.show();
	b2.show();
	
}
#include<iostream>
using namespace std;
class A{
	private:
		int b,c;
	public:
		void show();
};
void A::show(){
	cout<<b<<'\t'<<c<<endl;
}
int main(){
	A a1;//未定义构造函数,系统默认建立并调用A(){}的构造函数进行初始化 
	a1.show();
} 

4.拷贝函数

是构造函数特殊形式,实现对象之间数据的传递

cpp 复制代码
 
	cout<<"Date类的拷贝函数被调用" <<endl; 
}
void Date::show(){
	cout<<"year:"<<year<<'\t'<<"month:"<<month<<'\t'<<"day"<<day<<endl;
}
int main()
{
	Date d1(1998,5,13);
	Date d2(d1);//调用拷贝函数,将对象传入,实现对象数据传递 
	d1.show();
	d2.show();
 } 

5.析构函数

功能与构造函数相反,释放构造函数分配的内存空间。

无返回值,不能接收参数,只能有一个。

系统会自动调用,无定义时默认创建并调用~类名() {}

cpp 复制代码
#include<iostream>
using namespace std;
class C{
	private:
		double r;
	public:
		C(double a=1):r(a){
			cout<<"调用构造函数为r赋值为"<<r<<endl; 
		}
		~C();//声明一个析构函数 
};
C::~C(){//定义析构函数 
	cout<<"调用析构函数,其r值为"<<r<<endl;
}
int main(){
	C c1,c2(10);//c1先创建后释放,c2后创建先释放 
} 

二、对象

1.对象数组

由多个对象实例组成的数组

cpp 复制代码
#include<iostream>
#define PI 3.1415926
using namespace std;
class Circle{
	private:
	    double r;
	public:
		Circle(double r1):r(r1){cout<<"已赋值!"<<endl;}
		double Perim();
		double area();
		double getR(){
			return r;
		};
};
double Circle::Perim(){
	return 2*PI*r;
}
double Circle::area(){
	return PI*r*r;
}
int main()
{
	Circle c[3]={Circle(1),Circle(2),Circle(3)};//初始化:每个元素对象调用构造函数的过程 
	cout<<"半径\t周长\t面积"<<endl;
	for(int i=0;i<3;i++)
	cout<<c[i].getR()<<'\t'<<c[i].Perim()<<'\t'<<c[i].area()<<endl;
 }

2.指向对象的指针

cpp 复制代码
#include<iostream>
using namespace std;
class A{
	private:
		int value;
	public:
		A(int v):value(v){
			cout<<"对象赋值完成!"<<endl;
		}
		void show(){
			cout<<"值为:"<<value<<endl;
		}
		void change(int v){
			value=v;
		} 
};
int main()
{
	A a1(2);
	cout<<"改变前value为"<<endl;
	a1.show();
	A *a2=&a1;//实例一个指向a1的指针对象 
	a2->change(3);//指针对象调用a1中的函数改变其值 
	cout<<"改变后value为"<<endl;
	a1.show();
 }

3.this指针

指向本类的实例对象

cpp 复制代码
#include<iostream>
using namespace std;
class A{
	private:
		int a;
	public:
		A(int a1=0):a(a1){
		}
		void show()
		{
			cout<<"this为"<<this<<'\n'<<"属性a为"<<a<<endl;
		}
};
int main()
{
	A a1(1);
	a1.show();
	cout<<"&a1为"<<&a1<<endl;//this指向a1对象 
	A a2(2);
	a2.show();
	cout<<"&a2为"<<&a2<<endl;//this指向a2对象
}

应用

cpp 复制代码
#include<iostream>
using namespace std;
class Rectangle{
	private:
		double length,width;
	public:
		Rectangle(double l,double w):length(l),width(w){
		}
		void show(){
			cout<<length<<'\t'<<width<<'\t'<<(length+width)<<'\t'<<length*width<<endl;
		}
		void change(double length,double width){//当形参名与属性名同名时,通过this区分,this调用类中属性名 
			this->length=length;//this是一个指针变量,要通过->调用 
			this->width=width;
		}
};
int main()
{
	Rectangle r(10,10);
	cout<<"长\t宽\t周长\t面积"<<endl;
	r.show();
	r.change(5,5);
	cout<<"改变值后"<<endl;
	cout<<"长\t宽\t周长\t面积"<<endl;
	r.show();
 } 
相关推荐
羑悻的小杀马特1 小时前
【AIGC篇】畅谈游戏开发设计中AIGC所发挥的不可或缺的作用
c++·人工智能·aigc·游戏开发
闻缺陷则喜何志丹1 小时前
【C++动态规划】1105. 填充书架|2104
c++·算法·动态规划·力扣·高度·最小·书架
初学者丶一起加油2 小时前
C语言基础:指针(数组指针与指针数组)
linux·c语言·开发语言·数据结构·c++·算法·visual studio
CodeClimb3 小时前
【华为OD-E卷-租车骑绿道 100分(python、java、c++、js、c)】
java·javascript·c++·python·华为od
易码智能3 小时前
【RealTimeCallBack】- KRTS C++示例精讲(4)
c++·定时器·kithara·windows 实时套件·krts
小王爱吃月亮糖3 小时前
QT-QVariant类应用
开发语言·c++·笔记·qt·visual studio
计科土狗3 小时前
基于c语言的union、字符串、格式化输入输出
c++
闻缺陷则喜何志丹3 小时前
【C++动态规划】1458. 两个子序列的最大点积|1823
c++·算法·动态规划·力扣·最大·子序列·点积
半盏茶香3 小时前
C语言勘破之路-最终篇 —— 预处理(上)
c语言·开发语言·数据结构·c++·算法
没事就去码4 小时前
RBTree(红黑树)
数据结构·c++