【c++】类中包含自身类对象的set

c++中,类中自身类对象不能做自己的类成员,但可以做静态数据成员,引用数据成员,以及vector,set中的类型成员。

如下面代码中定义的类。

#include<iostream>
#include<set>
using namespace std;
class A{
public:
  int a,b,c;
  set<A> subA;
  A(){};
  A(int aa,int bb,int cc){
    a = aa;
    b = bb;
    c = cc;
  }
  A(int aa,int bb,int cc,set<A> dd){
    a = aa;
    b = bb;
    c = cc;
    subA = dd;
  }
};

int main(){
  A aa(1,2,3);
  A bb(1,3,3);
  int b = 1;
  set<A> sub1,sub2;//(aa,bb);
  sub1.insert(aa);
  sub2.insert(bb);
  A dd(4,5,6,sub1);
  A ee(4,5,6,sub2);
  set<A> ff;
  ff.insert(ee);
  ff.insert(dd);
  cout<<dd.a<<dd.b<<dd.c<<endl;
}

如上面代码,class A中定义了自身类型的set,但set需要有自身的比较函数。同时细想之后会发现,对A的比较还需要递归调用比较函数,因此只能使用博客

https://blog.csdn.net/xll_bit/article/details/101302124

中对操作符<重载的方法。

改进后的类代码如下,注意 < 操作符的循环调用。(代码测试通过)

#include<iostream>
#include<set>
using namespace std;
class A{
public:
  int a,b,c;
  set<A> subA;
  A(){};
  A(int aa,int bb,int cc){
    a = aa;
    b = bb;
    c = cc;
  }
  A(int aa,int bb,int cc,set<A> dd){
    a = aa;
    b = bb;
    c = cc;
    subA = dd;
  }
  bool operator< (const A &other) const {
    if((a == other.a) && (b == other.b) && (c == other.c) && (subA.size() == other.subA.size())){
      if(subA.size() == 0)
        return false;
      else {
        set<A>::iterator iter1,iter2;
        for(iter1 = subA.begin(),iter2 = other.subA.begin();iter1 != subA.end();iter1 ++,iter2 ++)
          return *iter1 < *iter2;
      }
    }
    else {
      if( a != other.a)
        return a < other.a;
      else if(b != other.b)
        return b < other.b;
      else if(c != other.c)
        return c < other.c;
      else 
        return subA.size() < other.subA.size();
    }
  }
};

另有高性能,深度学习,人工智能培训,报名咨询 优惠等着你!

http://www.huodongxing.com/event/6509102612000?qd=xielulu

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt5添加包含QWidget的C++类比较简单。首先,我们需要在头文件(.h)包含QWidget的声明。例如,我们可以使用以下代码: ```cpp #include <QWidget> ``` 然后,我们可以创建一个新的C++类,并继承自QWidget类。下面是一个示例代码: ```cpp class MyClass : public QWidget { Q_OBJECT public: MyClass(QWidget *parent = nullptr); ~MyClass(); }; ``` 在上述代码,我们创建了一个名为MyClass的新类,它继承自QWidget。我们还在类的声明包含了Q_OBJECT宏,这是为了支持Qt的信号和槽机制。 接下来,我们需要实现构造函数和析构函数。这可以在实现文件(.cpp)完成,如下所示: ```cpp MyClass::MyClass(QWidget *parent) : QWidget(parent) { // 构造函数的实现 } MyClass::~MyClass() { // 析构函数的实现 } ``` 在构造函数,可以执行初始化操作,例如设置窗口大小、添加控件等。析构函数可以在对象被销毁时执行一些资源清理的操作。 当我们完成上述步骤后,我们就可以在其他地方使用MyClass类了。例如,我们可以在主窗口类创建一个MyClass的对象,并将它添加到主窗口: ```cpp MyClass *myObj = new MyClass(this); myObj->show(); ``` 以上就是将包含QWidget的C++类添加到Qt5的基本步骤。当然,在实际开发可能会涉及更多的功能和操作,但基本的原理和方法是相同的。 ### 回答2: 在Qt5添加一个包含QWidget的C++类可以按照以下步骤进行。 1. 打开Qt Creator,创建一个新的Qt Widgets应用程序项目。 2. 在项目目录,右键单击项目文件,并选择“添加新建的”>“C++类”。 3. 在弹出的对话框,输入类的名称,并选择分配给的基类为“QWidget”。 4. 单击“下一步”按钮,选择在哪个目录生成新类的源文件和头文件。 5. 单击“完成”按钮,Qt Creator会自动生成一个新的C++类文件,并将其添加到项目。 现在,您可以使用这个新的QWidget派生类来创建自定义的窗口小部件。您可以在类的头文件添加任何自定义的成员函数和成员变量,以实现您的应用程序的功能。例如,您可以添加以下内容: ```cpp #ifndef MYWIDGET_H #define MYWIDGET_H #include <QWidget> class MyWidget : public QWidget { Q_OBJECT public: explicit MyWidget(QWidget *parent = nullptr); // 添加自定义成员函数和成员变量 signals: }; #endif // MYWIDGET_H ``` ```cpp #include "mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) { // 在构造函数进行初始化和设置 } ``` 然后,您可以在主窗口或其他地方创建并使用这个自定义的QWidget派生类: ```cpp #include <QApplication> #include <QWidget> #include "mywidget.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MyWidget widget; widget.show(); return a.exec(); } ``` 通过以上步骤,您就成功地在Qt5添加了一个包含QWidget的C++类。您可以根据自己的需求进一步定制和扩展这个类。 ### 回答3: 在Qt5添加包含QWidget的C++类可以通过以下几个步骤完成。 首先,我们需要创建一个C++类的头文件和源文件。可以使用Qt Creator自动生成这些文件。在Qt Creator,选择File -> New File or Project,选择C++ Class,并设置类的名称和位置。确保在类的头文件引入QWidget的头文件,例如#include <QWidget>。 接下来,在类的头文件,我们需要将该类声明为QWidget的子类。在类的声明添加一个继承QWidget的关键字: ```cpp class MyClass : public QWidget { Q_OBJECT public: // 类的构造函数和其他成员函数的声明 }; ``` 然后,在类的源文件,我们需要实现类的构造函数和其他所需的成员函数。可以通过在构造函数调用QWidget的构造函数来初始化QWidget的实例,并设置类的窗口属性: ```cpp MyClass::MyClass(QWidget *parent) : QWidget(parent) { // 设置窗口属性 setWindowTitle("My Widget"); resize(300, 200); // 其他初始化操作 } ``` 最后,在主程序,我们可以创建和展示这个自定义的QWidget类的实例。在主函数创建一个Qt应用程序,然后实例化MyClass类,并显示它: ```cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); MyClass myObject; myObject.show(); return app.exec(); } ``` 通过以上步骤,我们成功地在Qt5添加了一个包含QWidget的C++类。这个自定义的QWidget类可以通过实例化并显示来在应用程序使用,并具备QWidget的交互和界面功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值