// ============================================================================ // p1c04_03_06 — 4.3.7.2 类对象作为成员 // 来源:川大 C++/LinuxC wiki「02.Qt方向」 // 说明:本文件由 gen_part1.py 合并页面中的教学片段而成。每个片段用 // // --- 原文片段 [pageId:blockIdx] --- 标注出处。 // 已做最小修正(笔误/平台移植),详见 docs/ERRATA.md。 // ============================================================================ #include using namespace std; // --- 原文片段 [58954451:5] 4.3.7.2 类对象作为成员 --- //汽车类 class Car{ public: Car(){ cout << "Car 默认构造函数!" << endl; mName = "大众汽车"; } Car(string name){ cout << "Car 带参数构造函数!" << endl; mName = name; } ~Car(){ cout << "Car 析构函数!" << endl; } public: string mName; }; //拖拉机 class Tractor{ public: Tractor(){ cout << "Tractor 默认构造函数!" << endl; mName = "爬土坡专用拖拉机"; } Tractor(string name){ cout << "Tractor 带参数构造函数!" << endl; mName = name; } ~Tractor(){ cout << "Tractor 析构函数!" << endl; } public: string mName; }; //人类 class Person{ public: #if 1 //类mCar不存在合适的构造函数 Person(string name){ mName = name; } #else //初始化列表可以指定调用构造函数 Person(string carName, string tracName, string name) : mTractor(tracName), mCar(carName), mName(name){ cout << "Person 构造函数!" << endl; } #endif void GoWorkByCar(){ cout << mName << "开着" << mCar.mName << "去上班!" << endl; } void GoWorkByTractor(){ cout << mName << "开着" << mTractor.mName << "去上班!" << endl; } ~Person(){ cout << "Person 析构函数!" << endl; } private: string mName; Car mCar; Tractor mTractor; }; void test(){ //Person person("宝马", "东风拖拉机", "赵四"); Person person("刘能"); person.GoWorkByCar(); person.GoWorkByTractor(); } // --- main --- int main() { test(); return 0; }