【发布时间】:2014-06-29 04:13:43
【问题描述】:
我编写了一些代码来计算 RSA 加密算法。该程序使用类和继承,因为我想为多个用户计算公钥和私钥。有一个父类rsa和子类public_key和private_key。
编译下面的代码时,我得到了很多错误。所有这些都是关于派生类在其各自的构造函数中没有可用字段(请参见代码下方的错误消息)。但是,这些变量是在父类中使用protected 访问修饰符定义的,因此子类应该可以访问它们。
附注:我在两个子类中都有函数key,但我认为将它放在父类中一次会更好,对吗?
代码如下:
#include <iostream>
#include <math.h>
using namespace std;
class rsa
{
protected:
int p, q, d, m, n, f, e, c, end, k;
public:
rsa() : n(0), e(0), c(0), k(0), end(0), f(0)
{ }
void set(int , int , int, int);
int key()
{
n = p * q;
f = (p - 1) * (q - 1);
for (k; end < 1; k++)
{
if ((1 + k * f) % d == 0)
{
end = 2;
e = (1 + k * f) / d;
}
}
c = int(pow(m, e)) % n;
return c;
}
};
void rsa::set(int p_, int q_, int d_, int m_)
{
p = p_;
q = q_;
d = d_;
m = m_;
}
class public_key : public rsa
{
public:
public_key() : n(0), e(0), c(0), k(0), end(0), f(0)
{ }
};
class private_key : public rsa
{
public:
private_key() : n(0), e(0), c(0), k(0), end(0), f(0)
{ }
};
int main()
{
public_key usr1, usr2;
private_key usr1r, usr2r;
usr1.set(11, 5, 23, 9);
usr2.set(13, 7, 97, 6);
usr1r.set(17, 7, 51, 8);
usr2r.set(11, 17, 51, 4);
cout << "Public key of user 1: " << usr1.key() << endl;
cout << "Public key o user 2: " << usr2.key() << endl;
cin.get();
return 0;
}
其中一个错误:
error: class ‘private_key’ does not have any field named ‘e’
private_key () : n(0), e(0), c(0), k(0), end(0), f(0) {} ;
所有其他错误都相同,但字段名称更改。
【问题讨论】:
-
请发布确切的错误和位置。
-
人们宁愿看到实际的错误消息,也不愿被告知您对错误消息的解释。
-
你不能像那样初始化基类的成员。
-
我已经编辑了问题,包含一个错误。我必须把所有的错误都写出来吗?
-
@CaptainObvlious 初始化有什么问题?它正在编译没有错误,但那是函数键在两个派生类中的时候。
标签: c++ class inheritance member protected