c++-构造函数练习和delete,new

强化练习


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace	std;

class	ABCD
{
public:
	ABCD(int	a, int	b, int	c)
	{
		_a = a;
		_b = b;
		_c = c;
		printf("ABCD()	construct,	a: %d,b: %d,c: %d		 
", _a, _b, _c);
	}
	~ABCD()
	{
		printf("~ABCD()	construct,a: %d,b: %d,c: %d		 
", _a, _b, _c);
	}
	int	getA()
	{
		return	_a;
	}
private:
	int	_a;
	int	_b;
	int	_c;
};

class	MyE
{
public:

	MyE() :abcd1(1, 2, 3), abcd2(4, 5, 6), m(100)
	{
		cout << "MyE()" << endl;
	}
	~MyE()
	{
		cout << "~MyE()" << endl;
	}

	MyE(const	MyE	&	obj) :abcd1(7, 8, 9), abcd2(10, 11, 12), m(100)
	{
		printf("MyD(const	MyD	&	obj) 
");
	}
public:
	ABCD	abcd1;	 //c++编译器不知道如何构造abc1
	ABCD	abcd2;
	const int	m;
};

int	doThing(MyE	mye1)//mye1.拷贝构造(main::myE)
{
	printf("doThing()	mye1.abc1.a: %d 
", mye1.abcd1.getA());
	return 0;
}
int	run()
{
	MyE	myE;
	doThing(myE);
	return 0;
}

int	run2()
{
	printf("run2	start.. 
");
	//ABCD(400, 500, 600);	 //临时对象的⽣命周期		
	ABCD	abcd	=	ABCD(100,	200,	300);
	printf("run2	end
");
	return 0;
}

int	main(void)
{
	run2();
	return 0;
}

强化练习2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>
using namespace	std;

//构造中调⽤构造是危险的⾏为
class	MyTest
{
public:
	MyTest(int	a, int	b, int	c)
	{
		_a = a;
		_b = b;
		_c = c;
	}
	MyTest(int	a, int	b)
	{
		_a = a;
		_b = b;
		MyTest(a, b, 100);//创建一个匿名对象
		//
	}
	~MyTest()
	{
		printf("MyTest~: %d,	 %d,	 %d
", _a, _b, _c);
	}
	int	getC()
	{
		return	_c;
	}
	void	setC(int	val)
	{
		_c = val;
	}

private:
	int	_a;
	int	_b;
	int	_c;
};

int	main()
{
	MyTest	t1(1, 2);
	printf("c: %d
", t1.getC());	 //请问c的值是?
	return 0;
}

  • 对象的动态构造和释放
    • malloc free函数,new delete 操作符号
    • 分配基础类型 、分配数组类型、分配对象
    • new和malloc 深入分析,混用测试、异同比较
  • 匿名对象生命周期
  • malloc free函数,new delete 操作符号
  • 分配基础类型 、分配数组类型、分配对象
  • new和malloc 深入分析,混用测试、异同比较
  • 匿名对象总结
    • 匿名对象生命周期
    • 匿名对象去和留
    • 构造中调用构造
  • 匿名对象去和留
  • 构造中调用构造
  • 静态成员变量和静态成员函数(属于类,语法)

new和delete

c与c++的比较

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <fstream>


using namespace std;

class Test
{
public:
	Test()
	{
		cout << "Test()" << endl;
		m_a = 0;
		m_b = 0;
	}
	Test(int a, int b)
	{
		cout << "Test(int, int)" << endl;
		m_a = a;
		m_b = b;
	}
	void printT()
	{

		cout << "printT:"<<m_a<<","<<m_b << endl;
	}
	~Test()
	{
		cout << "~Test()" << endl;

	}
private:
	int m_a;
	int m_b;
};

//C语言中
void test1()
{
	int *p = (int *)malloc(sizeof(int));

	*p = 10;
	if (p != NULL) {
		free(p);
		//delete p;
		p = NULL;
	}

	int *array_p = (int *)malloc(sizeof(int)* 10);

	for (int i = 0; i < 10; i++) {
		array_p[i] = i + 1;
	}

	for (int i = 0; i < 10; i++) {
		printf("%d ", array_p[i]);
	}
	printf("
");

	if (array_p != NULL) {
		free(array_p);
		array_p = NULL;
	}


	cout << "==============" << endl;

	Test *tp = (Test*)malloc(sizeof(Test));
	tp->printT();

	if (tp != NULL) {
		free(tp);
		tp = NULL;
	}
}

//malloc free 是函数,标准库,stdlib.h
//new 在堆上初始化一个对象的时候,会触发对象的构造函数。malloc不能
//free并不能触发一个对象的析构函数。
//C++中
void test2()
{
	int *p = new int;
	*p = 10;
	if (p != NULL) {
		free(p);
		p = NULL;
	}

	int *array_p = new int[10];
	for (int i = 0; i < 10; i++) {
		array_p[i] = i + 1;
	}

	for (int i = 0; i < 10; i++) {
		cout << array_p[i]<<" ";
	}
	cout << endl;

	if (array_p != NULL) {
		delete [] array_p;
	}

	cout << "==========" << endl;
	//Test *tp = new Test(10, 20);//触发有参构造
	Test *tp = new Test;//触发无惨构造
	tp->printT();
	if (tp != NULL) {
		delete tp;
		tp = NULL;
	}

}

int main(void)
{
	test1();

	cout << "-----------" << endl;

	test2();
	
	return 0;
}
原文地址:https://www.cnblogs.com/ygjzs/p/12076503.html