大编辑:
我有一个代码,我必须使用_elemente(它是一个向量)在一个继承的类中添加一个常量成员。不要在继承的类中添加成员,只需使用_elemente即可。在每个继承的类中(让我们说B,C,D和E)我没有MAX_VAL1,MAX_VAL2,依此类推,具有不同的值。 我试过了:
#include <iostream>
#include <iomanip>
#include <vector>
typedef unsigned int Uint;
typedef vector<Uint> TVint;
typedef vector<Uint>::const_iterator TIterator;
class A
{
protected:
Uint _count;
TVint _elemente;
public:
//
};
class B : public A
{
const int MAX_VAL;
};
但它有一名成员,我不必在继承的班级中拥有一名成员。
这里的所有代码:
.h: http://pastebin.com/P3TZhWaV
.cpp: http://pastebin.com/ydwy2L5a
继承类的工作是使用常量成员完成的。
if MAX_VAL1 < count
{
throw Exception() {}
}
if (_elemente.size() == 0) // As _elemente is a vector from STL
{
_elemente.push_back(0);
}
for (int i = _elemente.size(); i < count; i++)
{
_elemente.push_back(_elemente[i * (i+1) / 2]);
}
}
我不认为这是正确的,因为我必须使用来自STL的Vector,而且我并不认为这是因为应该添加未声明实际成员的继承类的常量成员。 谢谢你的帮助。
答案 0 :(得分:1)
当你写的时候
class B : public A
{
const int MAX_VAL;
};
您希望B&C的班级实例能够以当前的方式保持什么价值? 您是否尝试将ctor添加到B(将MAX_VAL初始化为某个精确值),以便整个类定义应该像
class B : public A
{
const int MAX_VAL;
public:
B(int max_val):MAX_VAL(max_val) {}
};
此外,上面的代码显示了许多未解答的问题。其中一些:
您是否尝试过阅读Stroustrup或Lippman?
答案 1 :(得分:1)
您可以使用虚拟功能,如下所示:
class A
{
virtual int max_val() const = 0;
protected:
Uint _count;
TVint _elemente;
public:
//
};
class B : public A
{
int max_val() const { return 42; }
};
if ( max_val() < _count ) ...
答案 2 :(得分:1)
基于其他注释,您似乎想要一个可在基类中访问的const数,它可以根据派生类具有不同的值。你可以这样做:https://ideone.com/JC7z1P
输出: 答:50 B:80
#include <iostream>
using namespace std;
class Base
{
private:
const int aNumber;
public:
// CTOR
Base( const int _aNumber ) :
aNumber( _aNumber ) {}
// check value
int getNumber() const
{
return aNumber;
}
};
class A : public Base
{
public:
A() : Base( 50 ) {}
};
class B : public Base
{
public:
B() : Base( 80 ) {}
};
int main() {
A a;
B b;
std::cout << "A: " << a.getNumber() << std::endl;
std::cout << "B: " << b.getNumber() << std::endl;
return 0;
}
答案 3 :(得分:0)
如果要静态访问它,可以使用模板:
let g:NERDTreeCopyCmd= 'cp -r'
提供对值的多态访问ABase
提供对值的静态访问A
和B
是使用示例
C