草庐IT

c++ - 没有默认构造函数的类成员

假设我有一个没有默认构造函数的类A,一个工厂方法factoryA返回类型A的对象和以A作为其成员的类B。我知道在这种情况下,必须在B的构造函数初始化列表中初始化B的类型A的成员。我不完全清楚为什么,如果有人能向我解释,那就太好了。此外,如果A的构造函数的参数需要在B的构造函数内部计算,比如通过查询数据库或类似性质的东西怎么办?有没有办法在不为A提供默认构造函数的情况下使用下面的设置?提前致谢。classA{private:int_i;public:A(inti):_i(i){}};AfactoryA(boolb){if(b)returnA(1);elsereturnA(2);}clas

C++ 未初始化的类实例数组

我一直在搜索,但找不到这个问题的答案。有没有办法告诉new运算符不调用类构造函数?MyObject*array=newMyObject[1000];这将调用MyObject()一千次!我想自己填充分配的内存,不需要在构造函数中初始化的任何信息。使用malloc()并不是非常和谐的C++代码恕我直言。MyObject*array=(MyObject*)malloc(sizeof(MyObject)*1000); 最佳答案 相当于malloc的C++是分配函数operatornew.你可以像这样使用它:MyObject*array=st

c++ - 在用户定义的类中清空 std::vector 时未释放内存

当std::vector时我们遇到了一些内存问题是一个类的字段。我们用大量数据填充这个vector,在程序的某个时刻需要释放这些数据。然而,即使vector容量为零,内存也没有释放或完全释放。这里是我们程序的简化版本。如您所见,类Foo只有一个字段:astd::vector.如果我们创建一个std::vector并填写Foo对象,当我们清空每个对象内部的vector时,内存并没有完全释放。我们使用事件监视器测量了内存使用情况,您可以在每个日志行旁边看到每个阶段使用的字节数。此外,我们添加了另一个不使用类Foo的版本对象,在这种情况下,内存被完美释放。#include#includecl

c++ - C++中跨多个文件的类

我几乎100%确定我在这两个类中的语法都是正确的,但是我遇到了以下错误:对于CShape.cpp-“错误C2011:‘CShape’:‘类’类型重新定义”对于CCircle.cpp-“错误CS2504:‘CShape’:基类未定义”这里是CShape.cpp的完整代码#includeusingnamespacestd;classCShape{protected:floatarea;virtualvoidcalcArea();public:floatgetArea(){returnarea;}}这是CCircle.cpp的代码#include#include"CShape.cpp"#de

c++ - 我怎样才能部分特化所有枚举的类模板?

假设我有一些类模板:templateclass{//....}我可以通过以下方式为ALL指针部分特化此模板:templateclass{//....}我能以某种方式专门化ALL枚举的模板吗?即,做类似的事情:(虽然这不起作用)templateclass{//....} 最佳答案 使用C++11和SFINAE。#includetemplatestructSpecialize{};templatestructSpecialize::value>::type>{voidconvert(){}};enumE{};intmain(){Spec

c++ - 包裹在智能指针中的类的运算符重载

我一直在尝试对包含在智能指针中的类进行一些运算符重载(*和+)。autop=std::make_unique>();当我尝试使用正常重载对其进行重载时,它显然需要智能指针类型。编辑,所以:std::unique_ptr>operator+(conststd::unique_ptr>&right);templatestd::unique_ptr>Polynomial::operator+(conststd::unique_ptr>&right){//Dostuff}错误:那么当类被封装在智能指针中时,您如何着手重载普通运算符呢? 最佳答案

c++的类开发第一篇

class_1什么是接口?类就是一种公共接口,公众(public)是使用类的程序,交互系统由类对象组成,而接口由编写类的人提供的方法组成。接口让程序员能够编写与类对象交互的代码,从而让程序能够使用类对象。例如,要计算string对象中包含多少个字符,您无需打开对象,而只需使用string类提供的size()方法。类设计禁止公共用户直接访问类,但公众可以使用方法size()。oop风格OOP(面向对象编程)是一种编程范式,它将程序组织为相互交互的对象。这种编程风格基于对象的概念,其中对象是通过封装数据和操作数据的方法(即类中的成员函数)来表示的。OOP风格的编程主要关注以下几个核心概念:封装(E

c++ - 为什么要将包含的类声明为头文件?

为什么要将包含的类声明为头文件?#include"TreeCallObj.h"#include"TreeDevObj.h"#include"TreeDevCallObj.h"classTreeCallObj;//whatisthepurposeofthisline?classTreeDevObj;//whatisthepurposeofthisline?classTreeDevCallObj;//whatisthepurposeofthisline?classApple{public:...private:...} 最佳答案 考虑一

c++ - 在 C++ 的类中重载运算符 <<

我有一个使用结构的类,我想重载该结构的typedefstructmy_struct_t{inta;charc;}my_struct;classMy_Class{public:My_Class();friendostream&operator只有当我用friend关键字声明operator编辑:我想使用重载运算符打印一个my_struct,它是My_Class的成员 最佳答案 不要使用运算符classMy_Class{public:My_Class();private:voidPrint(ostream&os,constmy_stru

c++ - 指向具有不同模板参数的类模板的指针

这个问题不太可能帮助任何future的访问者;它只与一个小的地理区域、一个特定的时间点或一个非常狭窄的情况相关,这些情况并不普遍适用于互联网的全局受众。为了帮助使这个问题更广泛地适用,visitthehelpcenter.关闭10年前。我在面试中遇到了这个问题,但仍然不知道如何解决:假设我们有一段C++代码:intmain(intargc,char*argv[]){L*pA=0;L*pB=0;pA=pB;}我们应该添加什么才能真正编译?也就是说,我们应该如何定义L、A和B类呢?请不要使用预处理器指令。我只知道如何解决:templatestructL{};structA{};typede