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