// 构造函数(Constructor):构造器,在对象创建的时候自动调用,一般用于完成对象的初始化工作
//特点:函数名与类同名,无返回值(void都n不能写),可以有参数,可以重载,可以有多个构造函数;
一旦定义了构造函数,必须用其中一个自定义的构造函数来初始化对象.
注意:通过malloc分配的对象不会调用构造函数
struct Person {
int m_age;
Person(){
this->m_age = 0;//构造函数中可以放些初始化的东西
memset(this,0,sizeof(Person))
cout << "Person()" << endl;
}
// 构造函数的重载
Person(int age){
cout << "Person(int age)" << endl;
this->m_age = age;
}
};
int main(){
Person person; l
person.m_age = 20;
// 汇编语法:
ea ecx, [person]
// 如果struct中写了构造函数,会直接调用构造函数,如果struct中没有写构造函数就不会调用构造函数了
call Person::Person (02814B0h);
mov dword ptr [person], 0Ah;
// 构建一个Person对象的时候,传了一个参数
Person person2(20);
Person *p1 = new Person();
Person *p2 = new Person(30);
// 上面这两种都会调用构造函数,所以new关键字会申请对象空间,和主动调用构造函数
Person *p3 = (Person *)malloc(sizeof(Person));
//通过malloc分配的对象不会调用构造函数,malloc只知道申请字节,就返回地址.
// 注意:一个广为流传的,很多教程\数据都推崇的错误结论:默认情况下,编译器会为每一个类生成空的无参的构造函数,正确理解是:在某些特定的情况下,编译器才会为类生成空的无参的构造函数.
// 栈空间
Person person3; //Person()
Person person4(); //函数声明,函数名为person4,无参,返回值类型是Person
Person person5(20);//Person(int age)
// 堆空间
Person *p5 = new Person; Person()
Person *p6 = new Person();Person()
Person *p7 = new Person(30); Person(int age)
getchar();
return 0;
}
// 全局区
Person g_person1; // Person()
Person g_person2();// 这是一个函数声明,函数名叫g_person2,无参,返回值类型为Person
C++构造函数
最新推荐文章于 2024-09-17 12:41:46 发布