作者在 2010-06-16 19:41:36 发布以下内容
《C++语言的设计和演化》219页。虚函数和建构函数。
基本的设计要点:直到对一个对象的建构函数的运行结束之前,这个对象就一直像一个正在建造之中的建筑物:你必须忍受结构没有完工所带来的各种不便,常常需要依靠临时性的脚手架,必须时时当心在与危险环境相处时的各种问题。一旦建构函数返回,编译程序和用户就都可以假定构造完成的对象能够使用了。
/*
建构函数是建立起一个环境,使其他成员函数在其中操作。D&E p219
*/
#include<iostream.h>
class B
{
public:
int b;
virtual void f();//1. void f(); 2. virtual void f();
void g();
B();
};
void B::f()
{
cout << "B::f()" << '\n';
}
void B::g()
{
cout << "B::g()" << '\n';
b++;
f();//1. f(); 2. B::f();
}
B::B():b(0)
{
b++;
f();
}
class D : public B
{
public:
int x;
void f();
D();
};
D::D()
{
cout << "D::D()" << '\n';
f();
}
void D::f()
{
cout << "D::f()" << '\n';
}
int main()
{
D a;
a.f();
a.g();//观察调用的是B::f();or,D::f();
cout << endl;
B b;
b.f();
b.g();
return 0;
}
建构函数是建立起一个环境,使其他成员函数在其中操作。D&E p219
*/
#include<iostream.h>
class B
{
public:
int b;
virtual void f();//1. void f(); 2. virtual void f();
void g();
B();
};
void B::f()
{
cout << "B::f()" << '\n';
}
void B::g()
{
cout << "B::g()" << '\n';
b++;
f();//1. f(); 2. B::f();
}
B::B():b(0)
{
b++;
f();
}
class D : public B
{
public:
int x;
void f();
D();
};
D::D()
{
cout << "D::D()" << '\n';
f();
}
void D::f()
{
cout << "D::f()" << '\n';
}
int main()
{
D a;
a.f();
a.g();//观察调用的是B::f();or,D::f();
cout << endl;
B b;
b.f();
b.g();
return 0;
}