草庐IT

c++ - 虚拟继承情况下类的大小

谁能解释一下在涉及虚函数的虚继承的情况下类的大小。classA{chark[3];public:virtualvoida(){};};classB:publicA{charj[3];public:virtualvoidb(){};};classC:publicvirtualA{chari[3];public:virtualvoidc(){};};classD:publicB,publicC{charh[3];public:virtualvoidd(){};};类大小的输出是:sizeof(A):8sizeof(B):12sizeof(C):16sizeof(D):32我使用的编译器是g

c++ - 一个类的方法覆盖另一个类的所有方法

DerivedClass中的方法func覆盖方法func及其所有来自BaseClass的重载。#includeclassBaseClass{public:voidfunc(inta){puts("BaseClass::func(int)");};voidfunc(inta,intb){puts("BaseClass::func(int,int)");};voidfunc(inta,intb,intc){puts("BaseClass::func(int,int,int)");};//...};classDerivedClass:publicBaseClass{public:voidfu

c++重载另一个类的赋值运算符

我有一个C++类来处理分数,我希望它允许转换为double,我有类似的东西:classfraction{doublen,d;public:fraction(double_n,double_d){n=_n;d=_d;}//somefunctionsdoubletodouble(){returnn/d;}};fractionfrac(1,2);doubledbl=frac.todouble();效果很好,但我想重载赋值运算符,这样我就可以直接使用:doubledbl=frac;我试着添加这个:doubledouble::operator=(double&dbl,fraction&frac)

c++ - 类的编译是如何工作的?

有很多关于编译/链接过程的引用资料,但我对一个更具体的问题感兴趣:类的编译。问题的出现是因为一般情况下,在使用之前必须了解事物。例如:如果之前没有声明过,则不能调用该函数。在类里面,它不是以同样的方式完成的。您可以在成员出现之前使用它。编译器做什么?该标准是否说明了前一阶段的编译?更具体地说,以下示例显示了我们如何使用下面定义的成员。#includeclassEvenOdd{public:EvenOdd():value(0){}voidassignEven(unsignedv){if(v>0&&v%2==1){std::cout0&&v%2==0){std::cout我们还可以添加有关

AI教我学编程之C#类的基本概念(1)

前言在AI教我学编程之C#类型中,我们学习了C#类型的的基础知识,而类正是类型的一种.目录区分类和类型什么是类?对话AI追问实操追踪属性的使用AI登场逐步推进提出疑问药不能停终于实现探索事件的使用异步/交互操作耗时操作提示总结区分类和类型在C#中,类是类型的一种。C#是一种面向对象的编程语言,它的类型系统分为值类型和引用类型。类属于引用类型的范畴,因为它是用户定义的引用类型。什么是类?或者说,什么样的构造可以称之为类?在菜鸟教程上我们可以看到这段话我们来看看AI对此会如何回答?对话AI什么样的构造可以称之为类?在面向对象编程中,一个类是一个用于创建对象的蓝图或模板。一个类可以包含以下元素:成员

具有构造函数的类的 C++ vector

//Usingg++andubuntu.#includeusingnamespacestd;定义一个类:classfoo(){(...)foo(intarg1,doublearg2);}构造函数:foo::foo(intarg1,doublearg2){(...)//arrayswhoselengthdependuponarg1andarg2}我想做这样的事情:vectorbar(10);//error:nomatchingfunctionforcallto'foo::foo()'bar[0]=newfoo(123,4.56);(...)另一种方法(我不太喜欢)是使用push_back

c++ - 从模板基类派生的类的隐式转换

我在隐式转换、模板和模板类继承方面遇到了问题。以下是我从我的项目中提取的内容,我省略了一些类甚至是抽象的,但这与大小写无关。classA{};classB:publicA{};templateclassBase{};classDerived:publicBase{};intmain(){Derivedd;Base*base=newDerived();}基本上,我有一个模板基类Base我得出Derived:publicBase从。然后我必须将它转换为最常见的Base形式,即Base.我原以为我可以转换一个派生自Base的对象至Base隐含地,作为B源自A.我做错了什么或者我怎么能隐式?这

c++调用模板类的特定模板构造函数

如果类也是模板,是否可以使用模板参数调用构造函数?#include#includetemplatestructClass{templateClass(Barg){std::coutc(1.0f);Class*ptr=newClass(2.0f);return0;}编辑:所以我想调用特定模板构造函数的唯一方法是使用转换参数调用它到您想要的模板类型:#include#includetemplatestructClass{templateClass(Barg){std::coutc(1.0f);Class*ptr=newClass((double)2.0f);return0;}//这个输出:

c++ - 提供特征类的类型的模板特化

我有课templatestructDispatch;用于调用特定类型的函数。例如,假设我有像这样的调度员templatestructDispatch{staticvoidApply(void*a,MyClass&m){::memcpy(a,&m,sizeof(m));}};现在我有一堆类,我有一个类型特征ArrayTypes。我想做类似的事情:templatestructDispatch>{templatestaticvoidApply(void*a,ArrayType&m){::memcpy(a,&m,ArrayTypeTraits::GetSize(m));}};这可能吗?

c++ - 这段代码如何创建一个只有私有(private)构造函数的类的实例?

我正在开发一个声音库(使用OpenAL),并从FMOD提供的界面中获得灵感,您可以看到界面atthislink.我提供了一些概念,例如:Sound、Channel和ChannelGroup,正如您通过FMOD接口(interface)看到的那样,所有这些类都有一个私有(private)构造函数,例如,如果您要创建一个Sound,您必须使用函数createSound()由System类提供(与创建Channel或ChannelGroup相同)。我想提供一个类似的机制,但我不明白它背后是如何工作的。例如,createSound()函数如何创建新的Sound实例?构造函数是私有(privat