Line::Line( double len): length(len) { cout << "Object is being created, length = " << len << endl; }
上面的写法等价于
Line::Line( double len) { length = len; cout << "Object is being created, length = " << len << endl; }
多变量初始化
C::C( double a, double b, double c): X(a), Y(b), Z(c) { .... }
析构函数名称与类名称相同,只是加了一个 ~ 进行表示 用于删除所创建的对象
#include <iostream> using namespace std; class Line { public: Line(); // 这是构造函数声明 ~Line(); // 这是析构函数声明 }; // 成员函数定义,包括构造函数 Line::Line(void) { cout << "Object is being created" << endl; } Line::~Line(void) { cout << "Object is being deleted" << endl; } int main( ) { Line line; return 0; }
拷贝构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。拷贝构造函数通常用于:
拷贝构造函数形式
classname (const classname &obj) { // 构造函数的主体 }
#include <iostream> using namespace std; class Line { public: int getLength( void ); Line( int len ); // 简单的构造函数 Line( const Line &obj); // 拷贝构造函数 在这里,obj是一个对象引用,该对象是用于初始化另一个对象的。 ~Line(); // 析构函数 private: int *ptr; };
// 成员函数定义,包括构造函数 Line::Line(int len) { cout << "调用构造函数" << endl; // 为指针分配内存 ptr = new int; *ptr = len; } Line::Line(const Line &obj) { cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl; ptr = new int; *ptr = *obj.ptr; // 拷贝值 } Line::~Line(void) { cout << "释放内存" << endl; delete ptr; } int Line::getLength( void ) { return *ptr; } void display(Line obj) { cout << "line 大小 : " << obj.getLength() <<endl; } // 程序的主函数 int main( ) { Line line(10); display(line); return 0; }
以上程序输出结果
调用构造函数 调用拷贝构造函数并为指针 ptr 分配内存 line 大小 : 10 释放内存 释放内存