C++类的操作总结

/*待解决问题
双目操作符的重载与单目操作符的重载问题还要继续探究
类的继承,虚函数,纯虚函数
*/


#include <iostream>
#include <string>

using namespace std;
class person;

//定义person类的友元函数
class people
{
public :
	people(){cout<<"People构造函数被调用"<<endl;}
	void pselect(person &p);
	~people(){cout<<"People析构函数被调用"<<endl;}
};

//定义person类的友元类
class teacher
{
public :
	teacher(){cout<<"teacher构造函数被调用"<<endl;}
	void tprint(person &p);
	~teacher(){cout<<"teacher析构函数被调用"<<endl;};
};

class person
{
//定义私有成员,只允许类的成员函数或友元函数调用
private: 
	int    data;
	string name;
	string addr;
	mutable int  i;//定义可变成员
	static  int  stanum;
	const   int  j;
	int     r;
public:
	int   getStaticNum(){return stanum;}
public :

	//重载操作符,定义为成员函数
	person operator+(const person &a);

	//重载操作符,定义为非成员函数
	friend int operator +=(int n,const person &q);
	/*
	{
		n=n+q.data;
		return n;
	}*/

	//申明友元类
	friend class teacher;

	//友元函数访问私有成员
	friend void people::pselect(person &p); 

	//构造函数初始化列表,初始化const成员
	person():j(1),data(20){cout<<j<<endl<<"调用构造函数"<<endl;}

	void inil();

	//关键字const放在函数前面表明函数返回的是const值,放在函数后面表明不能随便修改类的成员变量,只能修改mutable定义的
	const void display()const;
	void print()const;
	~person(){cout<<"调用析构函数"<<endl;}
};


//类的静态成员必须在类定义完成之后才能初始化(不能只申明了类而没有定义类),且必须在类外初始化
int  person::stanum=8;

//定义友元类的成员函数
void teacher::tprint(person &p)
{
	cout<<p.addr<<endl;
}

//定义友元函数
void people::pselect(person &p)
{
	cout<<p.name<<endl;
}

//重载操作符(成员函数)
person person::operator +(const person &a)
{
	person b;
	b.data=a.data+this->data;
	b.name=a.name+this->name;
	b.addr=a.addr+this->addr;
	return b;
}

//重载操作符(非成员函数)
int operator +=(int n,const person &q)
{
	cout<<"n="<<n<<"q="<<q.data<<endl;
	n=n+q.data;
	return n;
}



//inline显示定义内联函数,内联函数的优点(内联函数的代码就会直接替换函数调用,于是省去了函数调用的开销)
inline void person::inil()
{
	cin>>this->name;
	cin>>this->addr;
	i=1;
}


void person::print()const
{
	cout<<this->name<<endl<<this->addr<<endl;
}


const void person::display()const
{
	i+=1;
	cout<<i<<endl;
	cout<<"常函数调用"<<endl;
}


int main()
{
	int  i=100;
	person  P;
	person  q;
	person  result;
	
	people  Pe;
	teacher T;
	P.inil();
	q.inil();
	P.print();
	q.print();
	P.display();
	Pe.pselect(P);
	T.tprint(P);
//	result=(P+q);
//	result.print();
	cout<<"(P+q).data="<<(P+q).getStaticNum()<<endl;
	i=(i+=q);
	cout<<"i="<<i<<endl;
	return 0;
}





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值