//***** 构造函数 ***** class rectangel { public: rectangel () // 默认的构造函数,如果没有自定义默认构造函数,系统就会自动生成,如果自定义构造函数,则系统就不会再生成默认构造函数 { std::cout << "默认的构造函数" << std::endl; } rectangel (int l, int w) // 这是带参数的构造函数,构造函数都是没有返回值,并且和该类同名 { length = l; width = w; } int area() // 这是另一种形式的内联函数,把声明和定义写在一起的也是内联函数 { return length * width; } private: int length; int width; }; //***** 析构函数 ***** class Human { public: Human(); // 构造函数 ~Human(); // 析构函数 /* 析构函数刚好和构造函数相反,构造函数用来构造函对象,而析构函数用来释放对象 注意: 析构函数在类中,只能有一个,并且析构函数不能有参数,它不像构造函数那样不但可以拥有多个,而且可以有参数 析构函数和构造函数一样,没有返回值 析构函数由系统自动调用,绝对不能由程序员调用 */ }; Human::Human() //***** 类中声明,类外定义 ***** { std::cout << "构造函数..." << std::endl; } Human::~Human() //***** 类中声明,类外定义 ***** { std::cout << "析构函数..." << std::endl; }
基类的构造顺序和析构顺序:
// 基类的构造顺序和析构顺序 #include <iostream> class A { public: A() { std::cout << "构造A" << std::endl; } ~A() { std::cout << "析构A" << std::endl; } }; class B { public: B() { std::cout << "构造B" << std::endl; } ~B() { std::cout << "析构B" << std::endl; } }; class C { public: C() { std::cout << "构造C" << std::endl; } ~C() { std::cout << "析构C" << std::endl; } }; class D:public A,public B, public C { // 基类的构造顺序会按照A->B->C来构造 // 基类的析构顺序会按照C->B->A来析构 }; int main() { D d; return 0; }