c++构造函数和析构函数

#include <iostream>
using namespace std;
#include <string> //c++ 中调用string类型 字符串时需要加,否则编译会报错-----包含一个头文件
#include <ctime>//使用时间头文件

//不提供构造函数和析构函数也可以,编译器默认有空的函数。

//构造函数 --- 初始化函数,编译器自动调用,只调用一次,函数名同类名可以有参数(同函数的重载),没有返回值,不用写返回值类型



//析构函数 --- 清理,编译器自动调用,只调用一次,函数名同类名,前边加~, 不能有参数,函数(对象)执行完才会调用析构函数
//默认有 Person(){}; ~Person(){};
class Person
{
public:
	Person()//构造函数--默认函数
	{
		cout << "我是默认构造个人" << endl;
	}
	Person(int a)//构造函数
	{
		cout << "我是有参构造的人" << endl;
	}
	Person(const Person &p)//拷贝函数
	{
		name=p.name;
		sex = p.sex;
		age = p.age;
		height = p.height;
		weight = p.weight;
		cout << "我是拷贝构造的人" << endl;
	}

	~Person() {//析构函数---程序执行完时候,会清理
		cout << "我休息了" << endl;
	}
private:
	string name;
	string sex;
	int age;
	int height;
	int weight;
};
void test() {
	Person P;//栈上的数据,test执行完后调用析构函数
}
void docc(Person p) {

}
void ccc() {
	Person p;
	docc(p);
	//先调用 默认构造函数,然后调用拷贝函数(传参时候复制一个空间)
}

Person c1() {
	Person p;
	return p;
}
Person c2() {
	Person p = c1();
	return p;
}
//静态成员对象 在类内声明,类外初始化
class Per {
public:
	//静态成员函数智能访问静态成员----访问权限(定义在私有区时,外部不能访问)
	static void f(int a, int b) {
		cc = a;
		//dd = b;//dd为非静态成员,不能再惊天函数中调用
	}
	Per& ff(Per &P) {
		this->dd += P.dd;
		return *this;
	}
	Per ffs(Per &P) {
		this->dd += P.dd;
		return *this;
	}
	static int cc;

	int dd;

};
int Per::cc = 2;
class jia {
	friend void goodGay(jia &j);//友元-》全局函数作为友元后,全局函数可以访问私有属性
	friend class canguan;//类作为友元
	public:
		//jia() {
		//	kt = "客厅";
		//	ws = "卧室";
		//};
		jia();//类外写函数
	public:
		string kt;//客厅
	private:
		string ws;//卧室
};
class canguan{
	public:
		canguan();
		void visit();//访问 jia 中的 私有属性
		jia *j;
		
};
jia::jia() {
	kt = "客厅1";
	ws = "卧室1";
}
canguan::canguan() {
	j = new jia;
}
void canguan::visit() {
	cout << j->kt << endl;
	cout << j->ws << endl;//由canguan 类 访问 jia类中私有属性,在jia类中设置canguan类为友元,即可访问
}
void goodGay(jia &j) {
	cout << j.kt << endl;
	cout << j.ws << endl;//ws为私有属性  类中没有做友元 则报错
}
void cjj() {
	jia j;
	goodGay(j);
}
//int main() {
	//test();//调用构造和析构()
	//调用默认函数时候不要加(),会被系统认为是一个函数声明 如 Person p();
	//Person p;
	//system("pause");//有此行时,上一行得再按一次任意键,程序才会执行完,然后调用析构函数
	//Person p2=Person(10);
	//Person(10);//称为匿名对象,在当前行执行完毕后,释放
	//Person(p2);//不要用匿名对象调用拷贝函数,系统默认为 如 ; Person p2=Person(p2); 相当于把p2 重定义了
	//隐式转换法
	//Person p3 = 10;//相当于 Person p3=Person(10);
	//c2();
	//Per(p1);
	//p1.dd = 10;
	//Per(p2);
	//p2.dd = 12;
	//链式编程思想
	//p2.ff(p1).ff(p1).ff(p1);//---返回42;
	//p2.dd = 12;
	//p2.ffs(p1).ffs(p1).ffs(p1);//---返回22,每一次调用ffs 返回一个新的对象,dd再成12,
	//cout << p2.dd << endl;
	//canguan c1;
	//c1.visit();
//}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值