草庐IT

msf会话派生cs

全部标签

使用将在派生构造函数中构造的参数调用的 C++ 基本构造函数

问题1)classBase{Base(std::stringname);virtualstd::stringgenerateName();}classDerived:Base{Derived();virtualstd::stringgenerateName();}问题来了:将在generateName()上调用什么方法?Derived::Derived:Base(generateName()){//whatmethodwillbecalledongenerateName()?}问题2)我应该怎么做?如果默认构造函数必须接受一个参数,但我需要在Derived构造函数中生成该参数?

c++ - QObject 派生类型是否需要父 QObject?

我正在编写一些派生自QObject的Qt类,它看起来像:classA:publicQObject{Q_OBJECTpublic:A():QObject(){}.....}但是我在几个地方看到,QObject派生类都有一个父类,例如:classA:publicQObject{Q_OBJECTpublic:A(QObject*parent=0):QObject(parent){}.....}所以问题是:我是否需要parent?如果我有一个,如果我有一个默认的(0)或者我根本没有,有什么区别? 最佳答案 因此你不需要parent。但是设置

派生对象上基于 C++11 范围的 for 循环

如果我有一个指向父类的指针vector,并且该vector是通过实例化从父类派生的对象来初始化的,那么我似乎无法使用基于范围的for循环来获取元素作为派生对象。这是一个简单的例子:#includeclassParent{};classDerived:publicParent{};intmain(){std::vectorobjects{newDerived(),newDerived()};for(Derived*d:objects){//ERROR//Used}return0;}有没有一种干净的方法来做我想做的事(即循环遍历派生对象)?我知道可以做这样的事情:for(Parent*p:

c++ - 在基类和派生类中 copy-and-swap

我最近读到copy&swap现在我正在尝试在基类和派生类中实现ctors。我的基类和派生类中都有四个构造函数,但是我不确定如何实现派生类的赋值运算符。explicitBase(inti):m_i{i}{}Base(constBase&other):m_i{other.m_i}Base(Base&&other):Base(0){swap(*this,other);}Base&operator=(Baseother){swap(*this,other);return*this;}friendvoidswap(Base&a,Base&b)noexcept{usingstd::swap;swa

c++ - 在 C++ 中,我可以防止派生类被 friend 以外的类实例化吗?

在C++中,如果我有一个抽象基类,是否可以防止它的派生类被基类知道的friend以外的类实例化? 最佳答案 您可以将构造函数定义为私有(private)的,就像任何其他函数一样。例如:classfoo{friendfoo*FooConstructor(void);public:voidMethod();voidMethod2();private:foo();foo(const&foo);};foo*FooConstructor(void){returnnewfoo();}这可以防止以任何方式创建foo,使用FooContructor

c++ - 派生类中的析构函数标记为 noexcept(false)

有如下代码:classMember{public:~Member()noexcept(false){}};classA{public:virtual~A(){}};classB:publicA{public:Memberm;};错误是:main.cpp:13:7:error:looserthrowspecifierfor‘virtualB::~B()noexcept(false)’classB:publicA^main.cpp:10:11:error:overriding‘virtualA::~A()noexcept’virtual~A(){}^为什么B类中的析构函数被标记为noexc

c++ - "Rename"派生类中的成员变量

这个问题可能看起来有点奇怪,但我会尝试对用例进行一些争论。假设您有一个二维(笛卡尔)场的通用实现,其维度为dim1和dim2,坐标为c1和c2。structField2D{structsize_type{size_tdim1,dim2;};structcoordinates{size_tc1,c2;}Field2D(size_typeconst&siz):size_(siz),data(size_.dim1*size_.dim2){}doubleget(coordinatesconst&coords){returndata_[coords.c1*size_.dim2+coords.c2

c++ - protected 派生类

#includeusingnamespacestd;classBase{public:Base(){cout当我执行上面的示例程序时,出现以下错误:protected.cpp:在函数“intmain(int,char**)”中:protected.cpp:26:错误:‘Base’是‘Derived’不可访问的基础为什么不能用基指针创建派生对象????所以我可以创建一个派生类的实例,例如DeriveddDerivedd1=newDerived;但是像这样从基类指针创建实例Base*b=newderived会失败。这是因为Derived在派生过程和私有(private)时实际上不是Base

c++ - 不能覆盖派生类中的静态初始化

我试图为层次结构中的类提供不同的静态初始化,但是当我尝试使用这段代码时:#includeusingnamespacestd;structbase{staticconstchar*componentName;};constchar*base::componentName="base";structderived:publicbase{};constchar*derived::componentName="derived";intmain(){cout我最终遇到了这个构建错误:test.cpp:15:error:ISOC++doesnotpermit‘base::componentName

c++ - 派生类中的虚拟限定符

派生类中基类的虚函数的虚限定符有什么区别吗?classb{public:virtualvoidfoo(){}};classd:publicb{public:voidfoo(){....}};或classd:publicb{public:virtualvoidfoo(){....}};除了让d的child知道foo()的虚拟性之外,这两个声明有什么区别吗? 最佳答案 没有区别。foo在派生自b(及其后代)的所有类中都是虚拟的。来自C++03标准,§10.3.2:Ifavirtualmemberfunctionvfisdeclaredi