用模板new一个对象

本文详细解析了类模板`Person`的使用,包括构造函数的正确调用、模板实例化实例以及不同创建方式的输出行为。展示了如何通过模板创建不同类型的Person对象,并讨论了静态构造函数和动态内存分配的要点。
摘要由CSDN通过智能技术生成

1)如果是一个普通的类 Person0

#include <iostream>
#include <string>
using namespace std;

class Person0
{
public:
	Person0(string name, int age)
	{
		this->mName = name;
		this->mAge = age;
	}
	void showPerson()
	{
		cout << "name: " << this->mName << " age: " << this->mAge << endl;
	}
public:
	string mName;
	int mAge;
};

int main(void) {
//第一种
	Person0 p("猪八戒1", 17);
	p.showPerson();
//第二种
    //Person0 p4();//这样写错了,不会声明报错但是不会运行构造函数
	//p4.showPerson();
    Person0 p4; //这样写才会调用构造函数
    p4.showPerson();//注意这里不会输出空串和0,而是随机的.见如下博客

//第三种
	Person0 *p1 = new Person0("猪八戒2", 17);
	p1->showPerson();
//第四种
	Person0 *p2 = new Person0;//默认构造函数
	Person0 *p3 = new Person0();//这个和上一行是一样的. 注意这是自己定义得类型. 如果是内置类型,则上面一种是未定义的.
	delete p1;//释放动态内存
	delete p2;
	delete p3;
    return 0;
}

https://blog.csdn.net/digitalkee/article/details/105043993

2)如果是一个类模板 Person

#include <iostream>
#include <string>
using namespace std;

//类模板
template<class NameType, class AgeType>
class Person
{
public:
	Person() { cout << "调用了构造函数"; };
	Person(NameType name, AgeType age)
	{
		this->mName = name;
		this->mAge = age;
	}
	void showPerson()
	{
		cout << "name: " << this->mName << " age: " << this->mAge << endl;
	}
public:
	NameType mName;
	AgeType mAge;
};

int main(void) {
	//第一种
	//Person<string, int> p("孙悟空", 18);
	//p.showPerson();

	//第二种
	//Person<string, int> p1();//这个报错,表达式必须包含类类型
	Person<string, int> p1;//这个可以运行构造函数
	//p1.showPerson();//并且输出随机数,原因同上面一样.

	//第三种 
	Person<string, int>* p3 = new Person<string, int>("悟空", 18);//返回一个指向Person<string,int>类型的指针
	//p3->showPerson();//注意调用方式
	delete p3;

	//第四种
	//Person<string, int>* p4 = new Person<string, int>;
	Person<string, int>* p4 = new Person<string, int>();///两种一样
	//p4->showPerson();
	delete p4;

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值