小编I G*_*ieb的帖子

为什么这个简单的C++类层次结构无法表现出多态行为?

如果有人能通过以下行为启发我,我会很感激 - 我用一个简短的代码示例捕获了它:

//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)

c++ polymorphism

1
推荐指数
1
解决办法
345
查看次数

为什么C++编译器在这里生成一个临时的?

以下类用于监视另一个进程的更改状态; 它的构造函数设置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)

c++

1
推荐指数
1
解决办法
588
查看次数

标签 统计

c++ ×2

polymorphism ×1