一.两种分类方式:
按参数分为:有参构造和无参构造
#include <iostream>
using namespace std;
class person {
public:
// 无参构造函数
person() {
cout << "无参构造函数调用" << endl;
// 执行默认的初始化操作
}
//有参构造函数
person(int a){
cout << "有参构造函数调用" << endl;
// 执行默认的初始化操作
}
};
按类型分为:普通构造和拷贝构造
#include <iostream>
using namespace std;
class MyClass {
public:
//有参构造函数
person(int a){
cout << "有参构造函数调用" << endl;
// 执行默认的初始化操作
}
// 创建拷贝函数,使用const防止修改本体数据
person(const person& p) {
cout << "拷贝构造函数调用" << endl;
// 将传入所有函数的信息复制到自己身上
}
};
二.三种调用方式:
沿用上面代码数据
(一)括号法
效果图:
注意事项:调用默认构造函数的时候,不要加() ,因为编译器会被认为是一个函数的声明,不会创建对象
(二)显示法
效果图:
注意事项一:匿名对象,特点:当前执行结束后,会立刻回收掉匿名对象
#include <iostream>
using namespace std;
class person {
public:
person() {
cout << "构造函数调用" << endl;
}
~person() {
cout << "析构函数调用" << endl;
}
void display() {
cout << "Hello, World!" << endl;
}
};
int main() {
// 在当前表达式中创建匿名对象,并调用其成员函数
person().display();
cout << "aaaaaa" << endl;
// 匿名对象已被销毁,无法再进行访问或调用
return 0;
}
效果图:
注意事项二:不要利用拷贝构造函数,初始化匿名对象,编译器会认为person(p3)=person p3,是对象的声明,引发重定义错误(前提是你的类里有这个对象)
如果类中没有这个对象,那么是可以通过的