C++ 简单C++;遗产
通过以下代码,我希望为intA实现两个不同的值,但我得到: 里昂证券a=1?1. clsB a=2?一,C++ 简单C++;遗产,c++,C++,通过以下代码,我希望为intA实现两个不同的值,但我得到: 里昂证券a=1?1. clsB a=2?一, //Code #include <iostream> using namespace std; class clsA { static const int intA = 1; public: virtual int get_a() { return intA; } }; class clsB: public clsA { static const in
//Code
#include <iostream>
using namespace std;
class clsA {
static const int intA = 1;
public:
virtual int get_a() { return intA; }
};
class clsB: public clsA {
static const int intA = 2;
};
int main() {
clsA a; clsB b;
cout << "clsA intA = " << a.get_a() << endl;
cout << "clsB intA = " << b.get_a() << endl;
}
//代码
#包括
使用名称空间std;
里昂证券{
静态常数intA=1;
公众:
虚拟int get_a(){return intA;}
};
clsB类:公共里昂证券{
静态常数intA=2;
};
int main(){
里昂证券a;里昂证券b;
无法将get_a()
的实现添加到clsB
:
class clsB: public clsA {
static const int intA = 2;
public:
virtual int get_a() { return intA; }
};
但是,intA
有两个不同的值是令人困惑的。我建议使用不同的命名方案,例如clsB
中的intB
,您需要告诉编译器,当geta
在clsB
上调用时,它需要返回在同一类中定义的intA
:
class clsB: public clsA {
static const int intA = 2;
virtual int get_a() { return intA; }
};
然而,这种编排方式可能不是最好的。考虑到“自动获得正确价值”的吸引力由于不可能做到这一点,因此,给常量指定不同的名称可能是一个好主意。您仍在调用只能看到a
的基本版本的基本函数
class clsA {
static const int intA = 1;
public:
virtual int get_a() { return intA; }
};
class clsB: public clsA {
static const int intA = 2;
int get_a() { return intA; }
};
int main() {
clsA a; clsB b;
cout << "clsA intA = " << a.get_a() << endl;
cout << "clsB intA = " << b.get_a() << endl;
}
clsA类{
静态常数intA=1;
公众:
虚拟int get_a(){return intA;}
};
clsB类:公共里昂证券{
静态常数intA=2;
int get_a(){return intA;}
};
int main(){
里昂证券a;里昂证券b;
试试这个:
class clsB: public clsA {
static const int intA = 2;
public:
virtual int get_a() { return intA; }
};
另一个不起作用的原因是实际上不存在方法clsB::get_a()只存在一个VTABLE条目,这样的方法可能已经被附加了。上面附上了方法。< / P>您所寻找的是较晚的静态绑定。自从我上次使用C++以来,已经有一段时间了。我不记得它是否支持后期静态绑定。实际上我想要CLSA::ItA=5和CLSB::ItA=8。代码,里昂证券提供5个随机数,而CSB提供8个随机数。他试图做的是重载静态变量。它并不真的令人困惑。@ Dy-必然:我认为这是令人困惑的,因为C++没有“重载静态变量”的概念。这与<>代码>静态< /代码>的含义正好相反。