标签:类型 创建 pre cout 定义 date() oid 生成 内存分配
在创建对象时,编译器会自动调用构造函数,初始化成员变量。
#include <iostream> using namespace std; class Date { public: Date(){};//定义默认构造函数 void setDate(int y,int m,int d) { m_year=y;m_month=m;m_day=d; }; void showDate(){ cout<<"year:"<<m_year<<", mouth:"<<m_month<<", day:"<<m_day<<endl;//可以访问类中数据成员 }; private: int m_year; int m_month; public: int m_day; };
和普通成员函数一样,构造函数是允许重载的。一个类可以有多个重载的构造函数,创建对象时根据传递的实参来判断调用哪一个构造函数。
构造函数的调用是强制性的,一旦在类中定义了构造函数,那么创建对象时就一定要调用,不调用是错误的。如果有多个重载的构造函数,那么创建对象时提供的实参必须和其中的一个构造函数匹配;反过来说,创建对象时只有一个构造函数会被调用。
如下示例有两种构造函数:
#include <iostream> using namespace std; class Date { public: Date(){ m_year=0;m_month=0;m_day=0; };//定义构造函数 Date(int y,int m,int d) { m_year=y;m_month=m;m_day=d; }; void setDate(int y,int m,int d) { m_year=y;m_month=m;m_day=d; }; void showDate(){ cout<<"year:"<<m_year<<", mouth:"<<m_month<<", day:"<<m_day<<endl;//可以访问类中数据成员 }; private: int m_year; int m_month; int m_day; }; int main(){ Date date1;//调用第一种构造函数 Date date2(2020,2,11);//调用第二种构造函数 date1.setDate(2020,2,10);//访问对象的成员函数 date1.showDate();//year:2020, mouth:2, day:10 date2.showDate();//year:2020, mouth:2, day:11 return 0; }
如果用户自己没有定义构造函数,那么编译器会自动生成一个默认的构造函数,只是这个构造函数的函数体是空的,也没有形参,也不执行任何操作。比如上面的 Date 类,默认生成的构造函数如下:
Date(){};
注意:
对于上面的例子,在栈上创建对象可以写作Date date()
或Date date
,在堆上创建对象可以写作Date *date = new Date()
或Date *date = new Date()
,它们都会调用构造函数Date()。
具体内存分配可参照:https://www.cnblogs.com/AntonioSu/p/12273116.html
标签:类型 创建 pre cout 定义 date() oid 生成 内存分配
原文地址:https://www.cnblogs.com/AntonioSu/p/12290571.html