如果有人能通过以下行为启发我,我会很感激 - 我用一个简短的代码示例捕获了它:
//header.h
class base
{
public:
base(int data):data1(data){}
virtual int getData(){return data1;}
private:
int data1;
};
class derived1 :public base
{
public:
derived1(int data):base(data-1),data2(data){}
virtual int getData(){return data2;}
private:
int data2;
};
class derived2 :public derived1
{
public:
derived2(int data):derived1(data-1),data3(data){}
virtual int getData(){return data3;}
private:
int data3;
};
//main.cpp
derived1 d1(20);
derived2 d2(10);
base& baseRefd1 = d1, baseRefd2 = d2;
cout << "call to baseRefd1.getData() yields: " << baseRefd1.getData();
cout << "call to baseRefd2.getData() yields: " << baseRefd2.getData(); …Run Code Online (Sandbox Code Playgroud) 以下类用于监视另一个进程的更改状态; 它的构造函数设置const引用以便于访问相关变量.这是代码:
template<typename FZYRSRC>
struct MergeableHeight: public FzyQty<FZYRSRC>
{
MergeableHeight(
const DDBuffer& me, const DDBuffer& neighbor, Orientation ori, bool useV =false)
: iP(me[PEAK_V].index()), iNP(neighbor[PEAK_V].index()),
facingNeighbor(iP < iNP ? RIGHT_V : LEFT_V), //vertex pointing to neighbor
facingMe(iP < iNP ? LEFT_V : RIGHT_V), //neighbor's vertex pointing to me
iMyEdge(edgeBar(me,facingNeighbor)), iNeighborEdge(edgeBar(neighbor,facingMe)),
myEdgeVal(me[facingNeighbor].datum()), neighborEdgeVal(neighbor[facingMe].datum()),
myPeakVal(me[PEAK_V].datum()), useVolatility(useV),o(ori)
{}
//member functions etc.
private:
virtual MergeableHeight* clone()const {return new MergeableHeight(*this);}
const int &iP, &iNP;
const PeakVertex facingNeighbor, facingMe; //PeakVertex is Enum {LEFT_V,PEAK_V,RIGHT_V}
const int &iMyEdge, &iNeighborEdge; …Run Code Online (Sandbox Code Playgroud)