Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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++ - Fatal编程技术网

C++ 无法从派生类访问静态方法

C++ 无法从派生类访问静态方法,c++,C++,如何使派生类无法访问静态方法 我继承了以下类型的类Square 从中导出矩形和菱形。然后从矩形和菱形导出平行四边形。然后从平行四边形导出梯形 我在一个对象向量中读取了所有这些对象(正方形、矩形、菱形、平行四边形、梯形),但最后我想显示我读过的每个对象的数量。我想通过每个类的静态函数来实现这一点 代码如下: A类 { 受保护的: 静态int n; 公众: A(); 静态空隙数a() { cout问题是派生类的构造函数也会调用基类构造函数 一个简单的修复方法是减少派生构造函数中基类的计数 #incl

如何使派生类无法访问静态方法

我继承了以下类型的类Square 从中导出矩形和菱形。然后从矩形和菱形导出平行四边形。然后从平行四边形导出梯形

我在一个对象向量中读取了所有这些对象(正方形、矩形、菱形、平行四边形、梯形),但最后我想显示我读过的每个对象的数量。我想通过每个类的静态函数来实现这一点

代码如下:

A类
{
受保护的:
静态int n;
公众:
A();
静态空隙数a()
{

cout问题是派生类的构造函数也会调用基类构造函数

一个简单的修复方法是减少派生构造函数中基类的计数

#include <iostream>

class A
{
protected:
    inline static int n_{};  // Since C++17
public:
    A()
    {
        ++n_;
    };
    static int number()
    {
        return n_;
    }
};

class B : public A
{
protected:
    inline static int n_{};
public:
    B()
    {
        ++n_;
        --A::n_;              // Decrease base count 
    }
    static int number()
    {
        return n_;
    }
};

class C : public B
{
protected:
    inline static int n_{};
public:
    C()
    {
        ++n_;
        --B::n_;              // Decrease base count 
    }
    static int number()
    {
        return n_;
    }
};

class D : public A
{
protected:
    inline static int n_{};
public:
    D()
    {
        ++n_;
        --A::n_;              // Decrease base count 
    }
    static int number()
    {
        return n_;
    }
};

int main()
{
    A a;
    B b;
    C c;
    D d;
    std::cout << A::number() << '\n' << B::number() << '\n'
              << C::number() << '\n' << D::number() << '\n';

    return 0;
}
#包括
甲级
{
受保护的:
内联静态int n_{};//自C++17
公众:
()
{
++n_;
};
静态整数()
{
返回n_;
}
};
B类:公共A
{
受保护的:
内联静态int n{};
公众:
B()
{
++n_;
--A::n_;//减少基计数
}
静态整数()
{
返回n_;
}
};
丙类:公共乙类
{
受保护的:
内联静态int n{};
公众:
C()
{
++n_;
--B::n_;//减少基计数
}
静态整数()
{
返回n_;
}
};
D类:公共A
{
受保护的:
内联静态int n{};
公众:
D()
{
++n_;
--A::n_;//减少基计数
}
静态整数()
{
返回n_;
}
};
int main()
{
A A;
B B;
C C;
D;

std::你为什么不缩进你的代码呢?任何类构造函数都会隐式调用它的基的无参数构造函数。所以
bb;
调用A和B的构造函数。放一些类似
cout的代码,你的模型看起来很奇怪。矩形不是正方形,也不是菱形。Parallelogram既不是矩形也不是菱形我们