Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 简单C++;遗产_C++ - Fatal编程技术网

C++ 简单C++;遗产

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

通过以下代码,我希望为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 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++没有“重载静态变量”的概念。这与<>代码>静态< /代码>的含义正好相反。