#include <iostream> using namespace std; class Benz { public: void run() { cout<<"奔馳開起來,秀一下!"<<endl; } }; class BMW { public: void run() { cout<<"寶馬開起來了,別摸我!"<<endl; } }; class Boss { public: Boss(Benz *benz){ this->benz=benz; } Boss(BMW *bmw){ this->bmw=bmw; } void drivebenz(){ benz->run(); } void drivebmw(){ bmw->run(); } private: Benz *benz; BMW *bmw; }; //此時若老闆還想開寶馬,必須還要再有一個BMW *bmw私有變量,還要定義相應的構造函數和方法 int main() { //張老闆開奔馳的業務 Benz benz; Boss Zhang(&benz); cout<<"張老闆準備開奔馳了,都閃開!"<<endl; Zhang.drivebenz(); //李老闆開寶馬業務 BMW bmw; Boss Li(&bmw); cout<<"李老闆來秀寶馬了,都給我打!"<<endl; Li.drivebmw(); return 0; }
可以看出如果我們要新建汽車,要重新建立新類。如果人要多開幾輛車,人物類中就會多出很多構造函數,方法與變量。這也不符合開閉原則。
這是很複雜的連接與耦合過程,當人和車越來越多,業務越來越多時,這顯然書寫代碼容易出錯,維護也不容易。