草庐IT

继承权

全部标签

c++ - 通过 using 指令公开私有(private)继承的内部模板

我正在尝试使用using引入public的指令派生类的访问声明一些在基类中声明的内部类模板。代码:templateclassBase{public:templatestructInner;};templateclassDerived:privateBase{public:usingtypenameBase::templateInner;//makeitvisibleInner*ptr;//noneedfortypenamehere,non-qualifiedname};intmain(){}g++和clang++都不编译这段代码,都提示error:expectedunqualified

c++ - 继承单例

快速提问。无论如何要继承一个单例,以便子类是一个单例?我四处搜索,但我能找到的每个单例都是按类实现的,而不是以通用方式实现的。 最佳答案 是的,有一个通用的方法。您可以通过CRTP实现单例。,比如:templateclassSingleton{protected:Singleton()noexcept=default;Singleton(constSingleton&)=delete;Singleton&operator=(constSingleton&)=delete;virtual~Singleton()=default;//t

c++ - 为什么私有(private)继承不能解决静态函数的歧义? (在 MSVC 中测试)

我想知道为什么对静态函数的调用是模棱两可的,即使两者之一显然不可能调用,因为它是私有(private)的。我希望我可以使用private/protected继承来帮助编译器解决歧义。它是特定于MSVC还是以某种方式在标准中指定?structA{staticintnum(){return0;}};structB{staticintnum(){return1;}};structC:publicA,privateB{};intmain(){C::num();//Ambiguousaccessofnum}背景是我正在尝试一种通过继承在许多派生类(C、D、E、F、G)中重用重载行为(A中的行为)

C++:模板化继承递归类:不可能的三重威胁?

因此,假设您有一个递归的基类(例如链表)和一个派生类。派生类应该重用基类的构造函数,因为你不想写冗余代码。您可以尝试显而易见的事情,但它不会起作用:classBase{public:Base(intsize){if(sizeprint();}}protected:Base*next;};classDerived:publicBase{public:Derived(intsize):Base(size){}voidprint(){coutprint();}}};intmain(){Derivedd2(5);d2.print();cout这行不通-当您实例化Derived时,它会构造一个D

DIV正在继承其父母的宽度,这不是我想要的

是否有一种方法可以使DIV的宽度与图像内部图像的宽度相同,而忽略了父母的宽度?我的包装器是1200px,我的图像容器的宽度未设置,并且容器内部的图像没有硬编码,因此我不能用图像容器的宽度进行硬编码。我想将图像容器包裹在图像周围,并具有与之相同的宽度。有什么办法吗?"."".$getResult['name'].''.''."".$getResult['description']."".$getResult['date']."".$getResult['author']."";if(isset($_SESSION['id'])){$id=$_SESSION['id'];$sql2="SELECT

在虚拟继承的情况下

在虚拟继承的情况下,VTable(或为什么需要VTable)的用途是什么?在这种情况下,这种可vt的指向了什么。例子:classA{voidshow(){}};classB:virtualA{voiddisp(){}};在上面的示例中,B类的大小为8个字节。这意味着B类具有VPTR指向VTable。这个VTable指向什么。看答案VTable是实施的最常见方法virtualC++中的关键字-任何使用该类别的类virtual关键字将为其创建一个VTable,该类的每个实例都将包含一个指向(单个)VTable的指针。VTable包含有关对象动态类的信息(支持dynamic_cast和typeinf

c++ - 多重继承类的复制构造函数

考虑这段代码:#include#includeusingnamespacestd;classBase{char_type;public:Base(chartype):_type(type){}~Base(){coutv;Baseb('b');Childc;v.push_back(b);v.push_back(c);return0;}我系统的输出是:Basedestructor:bChilddestructorBasedestructor:cBasedestructor:bBasedestructor:bBasedestructor:c我的问题是:为什么Base(b类型)的析构函数被调用

c++ - C++菱形继承(钻石问题)中如何调用所有基类的拷贝构造函数来拷贝大部分派(dispatch)生类对象?

考虑下面的代码:#includeusingnamespacestd;classA{public:A(){cout程序的输出如下:13571358因此,对于行Dd(d1)D的拷贝构造函数正在调用类。在继承过程中,我们需要显式调用基类的复制构造函数,否则只会调用基类的默认构造函数。到这里我才明白。我的问题:现在我想在Dd(d1)期间调用所有基类的复制构造函数执行。为此,如果我在下面尝试D(constD&obj):A(obj),B(obj),C(obj){cout然后我得到这个错误:错误:'classAA::A'isinaccessiblewithinthiscontext如何解决这个问题。

C++ 结构继承

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion据我所知,C++中类和结构的主要区别(可能是唯一的区别)是类的成员默认为私有(private),而结构的成员默认为公共(public)。但是,可能因为我以前是C语言开发人员,我仍然继续声明结构以仅包含“公共(public)”字段,并且我几乎从不声明方法(初始化成员的构造函数除外)。我还想利用结构的C++继承。我的问题是:即使语言允许,继承结构是否是一种好的做法?是否可以阻止结构声明虚方法,

c++ - 覆盖或删除继承的构造函数

这是一些C++代码:#includeusingnamespacestd;classm{public:m(){cout这是输出:mothermotherdaughter我的问题是我不希望在创建N时调用m的构造函数。我该怎么办? 最佳答案 据我所知,您不能删除继承的构造函数。您示例中的问题来自不正确的类设计。构造函数通常用于分配类资源、设置默认值等。不太适合用来输出东西。你应该把n(){cout进入虚函数。一般来说——如果您需要删除继承的构造函数,那么您可能需要重新考虑/重新设计您的类层次结构。