C++ 从继承的对象检索信息
我试图实现一个继承对象的层次结构,从简单到复杂,这样做的方式使对象具有尽可能多的面向对象的特性,但我认为这项工作可以在许多方面得到改进。任何建议都是非常受欢迎的。特别是,我不知道如何以安全的方式使用继承功能来解决以下问题:C++ 从继承的对象检索信息,c++,oop,inheritance,operator-overloading,C++,Oop,Inheritance,Operator Overloading,我试图实现一个继承对象的层次结构,从简单到复杂,这样做的方式使对象具有尽可能多的面向对象的特性,但我认为这项工作可以在许多方面得到改进。任何建议都是非常受欢迎的。特别是,我不知道如何以安全的方式使用继承功能来解决以下问题: 对象原子包含一个对象向量BasisFunction,它是从更简单的对象收缩中继承的。但在Atom中,我需要获得包含在每个基本函数的向量zeta和C中的信息。如何对此进行修改以使其成为可能 层次结构中的所有对象都可以复制吗?如何引入面向对象的功能 最后我想要一个分子单态。如何定
#include <iostream>
#include <armadillo>
using namespace std;
using namespace arma;
class Contraction{
protected:
vector<double> zeta;
vector<double> c;
vec A;
public:
Contraction(){} /*contructor*/
Contraction(vector<double> Zeta,vector<double> C, vec a):zeta(Zeta),c(C),A(a){}
/*contructor*/
~Contraction(){} /*destructor*/
bool deepcopy(const Contraction& rhs) {
bool bResult = false;
if(&rhs != this) {
this->zeta=rhs.zeta;
this->c=rhs.c;
this->A=rhs.A;
bResult = true;
}
return bResult;
}
public:
Contraction(const Contraction& rhs) { deepcopy(rhs); }
Contraction& operator=(const Contraction& rhs) { deepcopy(rhs); return *this; }
};
class BasisFunction: public Contraction{
protected:
vector<int> n;
vector<int> l;
vector<int> m;
bool deepcopy(const BasisFunction& rhs) {
bool bResult = false;
if(&rhs != this) {
this->zeta=rhs.zeta;
this->c=rhs.c;
this->A=rhs.A;
this->n=rhs.n;
this->l=rhs.l;
this->m=rhs.m;
bResult = true;
}
return bResult;
}
public:
BasisFunction(){};/*How to define this constructor to initialize the inherited elements too?*/
~BasisFunction(){};
};
class Atom{
protected:
int Z;
vec R; ///Position
vec P; ///Momentum
vec F; ///Force
double mass;
vector<BasisFunction> basis;
public:
/*Here I need to define a function that uses the information in vectors c_i and zeta_i of the vector basis, how could it be achieved?*/
};
vector<Atom> Molecule; /*I nedd transform this in a singleton, how?*/
#包括
#包括
使用名称空间std;
使用arma;
阶级收缩{
受保护的:
矢量zeta;
载体c;
vec A;
公众:
收缩(){}/*构造函数*/
收缩(向量Zeta,向量C,向量a):Zeta(Zeta),C(C),a(a){
/*承包商*/
~construction(){}/*析构函数*/
布尔深度复制(施工收缩和rhs){
bool-bResult=false;
如果(&rhs!=此){
这->zeta=rhs.zeta;
这->c=rhs.c;
本->A=rhs.A;
bResult=true;
}
返回结果;
}
公众:
收缩(常数收缩和rhs){deepcopy(rhs);}
收缩和运算符=(常量收缩和rhs){deepcopy(rhs);返回*this;}
};
类基本函数:公共压缩{
受保护的:
向量n;
向量l;
向量m;
布尔深度复制(常量基本功能和rhs){
bool-bResult=false;
如果(&rhs!=此){
这->zeta=rhs.zeta;
这->c=rhs.c;
本->A=rhs.A;
此->n=右S.n;
这->l=rhs.l;
这->m=rhs.m;
bResult=true;
}
返回结果;
}
公众:
BasisFunction(){};/*如何定义此构造函数来初始化继承的元素*/
~BasisFunction(){};
};
类原子{
受保护的:
intz;
向量R;///位置
vec P;///动量
向量F;///力
双质量;
向量基;
公众:
/*这里我需要定义一个函数,它使用向量基的向量c_I和zeta_I中的信息,它是如何实现的*/
};
载体分子/*我需要在一个单件中转换它,如何*/
提前谢谢
construction
的受保护字段设置为公共字段,或者将construction
中的Getter/Setter方法设置为访问此文件,或者修改类的所有层次结构,使此字段正好位于需要的位置李>
类分子
{
公众:
静态分子&Instance(){静态分子实例;返回实例;}
常量向量&GetMyData()常量{return data;}
vector&GetMyData(){return data;}
私人:
分子(){};
分子(常量分子和rhs);
常量分子和运算符=(常量分子和rhs);
矢量数据;
};使用C++11时,code>可能会更好地问这个问题,您可以使用=delete
来复制构造函数,但我没有看到主题启动程序问题上的C++11标记。将非常量引用返回到静态
变量的原因是什么?您有时可能需要更改数据。因此,Molecule::Instance().GetMyData()将适用于此。如果您有static const Molecule&Instance(),那么这是不可能的。