构造函数: 给类中内部成员赋值,包括共有,私有,受保护的
说明:
1)构造函数没有返回值
2)构造函数可以有形参或没有形参
3)构造函数名一定与类名相同
4)构造函数可以重载
5)每个类中有一个默认的无参构造函数,当用户自定义了构造函数,系统的无参构造函数将被替换.
6)构造函数是特殊的函数,不能用private修饰.
一个对象实例化或者new,那么一定会调用对应的构造函数的
#include <iostream>
#include <stdlib.h>
using namespace std;
//一个对象实例化或者new,那么一定会调用对应的构造函数的
//如果没实现构造函数,系统会自动帮我们不上构造函数的
class Human
{
private:
char *name;
int age;
public:
Human(); //构造函数的函数名称一定是和类名一致的
//构造函数是没有返回值的
//构造函数只能是public的权限
Human(char *name, int age); //构造函数是可以重载的
void get_info();
void set_info(char *name, int age);
};
Human::Human(){
cout << "构造函数" << endl;
}
Human::Human(char *h_name, int h_age){
cout << "构造函数重载" << endl;
name = h_name;
age = h_age;
}
void Human::get_info(){
cout << "name: " << name << " age: " << age <<endl;
}
void Human::set_info(char *h_name, int h_age){
name = h_name;
age = h_age;
}
int main(int argc, char const *argv[])
{
//构造函数什么时候被调用?
cout << "1=======================" << endl;
Human human1; //对象的实体,这里进行对象的实例化,会调用构造函数
cout << "2=======================" << endl;
Human *human2; //这里只是声明一个指针,所以不会调用构造函数
cout << "3=======================" << endl;
Human *human3 = new Human; //这里是对指针实例化,会调用构造函数
//new,申请一个对象的空间,那么会自动调用合适的构造函数
cout << "4=======================" << endl;
Human *human4 = (Human *)malloc(sizeof(Human));
//如果使用malloc申请空间,malloc是仅仅申请一个空间,不会调用构造函数的
cout << "5=======================" << endl;
Human *human5 = new Human((char *)"Tom", 20);
human5->get_info();
return 0;
}