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;
}