草庐IT

派生词

全部标签

c++ - 在接口(interface)不是时标记派生实现 noexcept 的副作用是什么

我们有一个实现IUnknown(或我们不拥有的任何接口(interface))的类。我们开始用noexcept标记我们的大部分/所有方法以进行任何潜在的优化,因为我们无论如何都不会抛出任何异常;尽管我们依赖的一些库可能。提出了QueryInterface/AddRef/Release是否应该标记为noexcept的问题,因为接口(interface)不是。当只有一些派生类被标记为noexcept时,是否有任何副作用或问题? 最佳答案 一般来说,您应该小心使用noexcept。除非编译器可以证明该函数确实不会抛出任何异常,否则它必须插

c++ - 为什么 "this"指针用于调用派生成员函数?

在this上阅读关于虚函数的教程(与本例无关)链接,我找到了这段代码。classWeapon{public:voidfeatures(){coutWeapon::features();cout类Weapon派生自类Bomb,其中调用了Weapon的成员函数。为什么使用“this”指针调用函数Weapon::features()?这不是已经隐式给出了吗? 最佳答案 this是隐式给出的,是否显式编写通常是风格问题。在您的情况下,我会说它不会提高可读性。然而,在其他情况下,显式写入this是有意义的,甚至是必要的为了避免局部变量和数据成

c++ - 如何通过派生类访问基类的 protected 成员?

这个问题在这里已经有了答案:Accessingprotectedmembersinaderivedclass(8个答案)关闭3年前。我正在尝试几个关于继承的程序,结果是以下导致了错误,但我真的不知道原因。#includeusingnamespacestd;classBase{protected:intx=0;};classDerived:publicBase{//OK:accessprotectedmemberviathisvoidg(){cout我希望派生类可以访问基类的公共(public)或protected数据成员和成员函数。然而它并没有像我想的那样起作用,谁能帮我阐明我的概念?

c++ - 使用基类方法初始化派生类成员

合法吗?如果是这样,您认为这是良好的编码习惯吗?我想做这样的事情(不显示不重要的细节):classItemStorage{intsize()const;};classSpecialStorage:publicItemStorage{public:SpecialStorage(...):ItemStorage(...),items(ItemStorage::size()){...}private:intitems;};我很确定如果方法size不是虚拟的就可以了。如果它是虚拟的并且派生类不覆盖它怎么办? 最佳答案 一般规则是,在初始化期

c++ - 具有固定实现的虚函数不使用 (*this) 的大多数派生类

假设我有以下代码:structZ;structA{virtualvoidDo(Z&z)const;};structB:publicA{};structZ{voiduse(Aconst&a){}voiduse(Bconst&b){}};voidA::Do(Z&z)const{z.use(*this);}现在,当我调用B.do,this的类型是A,这是有道理的,因为do的实现在A中定义.有什么方法可以调用B.do使用use(Bconst&)无需为do复制粘贴相同的代码来自A进入B?在我的实际代码中,我有大约15个(并且还在不断增加)派生自某个基类的类,必须为do复制粘贴相同的代码似乎很浪费

c++ - 如何从基类转换为派生类?

我想制作一个多线程模型,其中服务器主循环不会因挂起的数据库事务而停止。所以我做了几个简单的类,这是一个非常简化的版本:enumType{QueryType_FindUser=1现在,当我将数据作为Base传输时,我想再次将其转换回User类:concurrency::concurrent_queueBackgroundQueryQueue;voidBackgroundQueryWorker::Worker(){while(ServerRunning){QueryInformation::BaseTemp;if(BackgroundQueryQueue.try_pop(Temp)){sw

c++ - 派生类不能使用指向 protected 基类成员的成员指针

includeclassBase{protected:intfoo;intget_foo(){returnfoo;}};classDerived:publicBase{public:voidbar(){intBase::*i=&Base::foo;this->*i=7;printf("foois%d\n",get_foo());}};intmain(){Derivedd;d.bar();}我不明白为什么我的派生类型不能指向基类的protected成员。它有权访问该成员。它可以调用类似作用域的函数。为什么它不能创建一个成员指针?我正在使用gcc4.1.2,但出现此错误:test.cc:I

C++ 在基类中使用静态数组,在派生类中声明

我正在尝试创建一些类,它们都是从抽象类(我们称之为)BaseClass派生的类。在BaseClass中,我想对派生类中声明的static变量(数组)进行操作。C++中是否有一种聪明的方法让编译器知道静态变量将在派生类中声明?或者,例如,我应该在派生类的构造函数中将对静态变量的引用传递给基类构造吗?这是我的想法:classBaseClass{std::vector&vector;public:BaseClass(std::vector&dVector):vector(dVector){};voidvectorOperation(){vector.doSomething();}...}cl

c++ - 是否可以通过删除基类中的复制构造函数/运算符来使派生类不可复制?

PreC++11,我问这是否可以使用私有(private)/未实现的技巧(参见here)。显然,这是不可能的。我想知道新的=delete语法是否改变了事态,因为强制派生类不可复制仍然是一个有用的特性。更新后的代码片段可能看起来像这样:classBase{public:Base(){}virtual~Base(){}Base(constBase&)=delete;Base&operator=(constBase&)=delete;virtualvoidinterfaceFunction()=0;//etc.//nodatamembers};classData{/*...*/};class

c++ - 如何确保从我的派生类调用纯虚方法?

我有以下情况:#includeclassBase{public:Base()=default;virtualvoidmake_sure_im_called()=0;};classChild:publicBase{public:virtualvoidmake_sure_im_called(){std::cout因此,我希望从Base派生的每个类都实现make_sure_im_called()(通过将其设为纯虚拟来成功完成)。但是我如何断言从Base派生新类的人也被迫调用该函数?由于缺少实现,我从基类尝试的一切似乎都会失败。 最佳答案