33,311
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class Worker{
public:
virtual void clean(){
cout << "base Worker" << endl;
}
};
class MyWorker: public Worker {
virtual void clean() {
cout << "MyWorker" << endl;
}
};
class A {
private:
Worker* w;
public:
void set_w(Worker* pw) {
w = pw;
}
~A() {
if (w != NULL) {
cout << "call w->clean()" << endl;
w->clean();
}
}
};
class B: public A {
private:
Worker* w;
public:
B() {
w = new MyWorker();
set_w(w);
}
~B() {
delete w;
}
};
int main() {
B* b = new B();
delete b;
}
#include <iostream>
using namespace std;
class Worker{
public:
virtual void clean(){
cout << "base Worker" << endl;
}
};
class MyWorker: public Worker {
virtual void clean() {
cout << "MyWorker" << endl;
}
};
class A {
//private:
protected:
Worker* w;
public:
void set_w(Worker* pw) {
w = pw;
}
virutal ~A() {
if (w != NULL) {
cout << "call w->clean()" << endl;
w->clean();
delete w;
}
}
};
class B: public A {
//private:
// Worker* w;
public:
B() {
w = new MyWorker();
set_w(w);
}
~B() {
//delete w;
}
};
int main() {
B* b = new B();
delete b;
}
这样我感觉好点
class B {
private:
Worker* w;
A* a;
public:
B() {
a = new A();
w = new MyWorker();
a->set_w(w);
}
~B() {
delete a;
delete w;
}
};