我有以下
class base
{
};
class derived : public base
{
public:
derived() {}
void myFunc() { cout << "My derived function" << std::endl; }
};
Run Code Online (Sandbox Code Playgroud)
我现在有
base* pbase = new derived();
pbase->myFunc();
Run Code Online (Sandbox Code Playgroud)
我收到错误 myFunc 不是 base 的成员函数。
如何避免这种情况?以及如何让 myFunc 被调用?
注意我应该让基类不包含任何功能,因为它是设计的一部分,上面的代码是大功能的一部分
来自Scott Meyers的Effective C++:
template<typename T, std::size_t n>
class SquareMatrix: private SquareMatrixBase<T> {
public:
SquareMatrix( )
: SquareMatrixBase<T>(n, 0),
pData(new T[n*n])
{
this->setDataPtr(pData.get());
}
...
private:
boost::scoped_array<T> pData;
};
Run Code Online (Sandbox Code Playgroud)
无论数据存储在何处,从膨胀的角度来看,关键结果是,现在很多 - 也许全部 - SquareMatrix的成员函数可以是对基类版本的简单内联调用,这些基类版本与所有其他具有相同类型的矩阵共享数据,无论其大小.同时,不同大小的SquareMatrix对象是不同的类型,所以即使例如SquareMatrix <double,5>和SquareMatrix <double,1 0>对象在SquareMatrixBase <double>中使用相同的成员函数,也没有机会将SquareMatrix <double,5>对象传递给期望SquareMatrix <double,1 0>的函数.很好,不是吗?
很好,是的,但不是免费的.具有硬连线的矩阵大小的反转版本可能比共享版本生成更好的代码,其中大小作为函数参数传递或存储在对象中.例如,在特定于大小的版本中,大小将是编译时常量,因此有资格进行常量传播等优化,包括将它们作为立即操作数折叠到生成的指令中.这不能在与大小无关的版本中完成.
在上一段的上述描述中,它被称为"因此有资格进行恒定传播等优化,包括将它们作为立即操作数折叠到生成的指令中".这个陈述是什么意思?请来解释一下.
谢谢!
我想要一些文本输出到文件.我听说最好是流式传输数据而不是创建一个大字符串并输出它.目前我正在创建一个大字符串并输出到文件.请求提供有关如何使用C++流式传输数据和写入文件的示例代码.
谢谢!
我正在阅读Bjarne Stroustrup 的The Design and Evolution of C++。关于异常处理和异步信号,如下所述:
异常可以用来处理信号之类的事情吗?在大多数 C 环境中几乎可以肯定不是。问题是 C 使用了像 malloc 这样不可重入的函数。如果在 malloc 中间发生中断并导致异常,则无法阻止异常处理程序再次执行 malloc。
一个 C++ 实现,其中调用序列和整个运行时库是围绕可重入的要求设计的,这将使信号抛出异常成为可能
作者所说的“没有办法阻止异常处理程序再次执行malloc”是什么意思?使函数可重入如何使信号处理程序抛出异常成为可能?
考虑n个人的集合M = {m1,m2,...,mn},以及n个女性的集合W = {w1,w2,...,wn}.设MXW表示形式(m,w)的所有可能有序对的集合,其中m属于M,w属于W.
甲匹配 S是一组有序对中,每个从MXW,条件是M的每个成员和W中的每个成员在大多数S.一对出现在属性
甲完美匹配 S1是与M的每个成员和W中的每个成员出现在S1恰好一对属性的匹配.
我很难理解上面关于匹配和完美匹配定义的陈述.
任何人都可以举例说明匹配和完美匹配以下示例.M = {m1,m2,m3},w = {w1,w2,w3}
感谢帮助
我正在使用TFS 2010.我必须检查在签入之前被其他开发人员搁置的代码.我们如何才能在TFS2010中执行此操作,以便我可以进行更改和审核.谢谢!
我在Windows下看到C++中的代码.
提到1个刻度等于100纳秒.这是针对Windows的吗?或者这是否是通用标准,如果它是标准的名称?其他操作系统也一样吗?
要求上述问题的原因我必须编写与平台无关的代码,如果是特定于Windows的话我必须为这部分代码添加#ifdef WIN32.
我有以下结构
enum quality { good = 0, bad, uncertain };
struct Value {
int time;
int value;
quality qual;
};
class MyClass {
public:
MyClass() {
InsertValues();
}
void InsertValues();
int GetLocationForTime(int time);
private:
vector<Value> valueContainer;
};
void MyClass::InsertValues() {
for(int num = 0; num < 5; num++) {
Value temp;
temp.time = num;
temp.value = num+1;
temp.qual = num % 2;
valueContainer.push_back(temp);
}
}
int MyClass::GetLocationForTime(int time)
{
// How to use lower bound here.
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,我遇到了很多编译错误.我想我在这里做错了我是STL编程的新手,请你纠正我的错误在哪里?这样做有好处吗? …
我正在从以下位置阅读文章.这是文本片段表单文档.
找到一套能保证获胜的最低票数并不是一件轻而易举的事.鉴于R中的P个结果将来自算命先生集,不难看出有NCP =(N/ P!)/(NP)!算命先生集中可能出现的P-子集可能出现在中奖票中.如果我们从算命先生中选择所有P子集W次并且任意填写剩余的RP时隙,则获得的票数集将至少具有每个P子集的W次并且保证我们W获胜.然而,这样的集合不需要是最小的集合,并且在大多数情况下不是.
我们从算命先生的承诺中知道其中一个P子集将出现在中奖票中.两个P子集的差异可能小于J个数.当出现这种情况时,据说子集相对于共享的J号重叠或相互覆盖,并且只有一个P子集必须在购买的票中.使用示例可以最好地说明这种现象.假设我们正在玩PICK-4 Lotto并需要一次2/4的胜利.因此R = 4,J = 2且W = 1.此外,我们假设算命先生从一组5个数字中预测3个数字(即P = 3和N = 5).如果所有P-subsets都是从算命套装中取出并任意填充以完成门票,那么我们将有一套十张门票,保证一次2/4获胜(见图1).然而,由于有两个数字重叠,因此也可以从此集合中排除某些票证.例如,子集{3,4,5}与{1,3,5}仅相差一个数字,并且在购买的票证中使用这两者都是浪费的.我们可能认为不包括{3,4,5}将允许丢失的可能性,但事实并非如此,因为如果{3,4,5}发生,我们在{1中将有'3'和'5', 3,5}我们买来要领奖!类似地,可以存在更多冗余P子集.最佳解决方案如图2所示.我们的彩票问题是从算命先生集中找到最小的P子集,通过将重叠次数保持在最小值来保证指定的获胜次数.
我的问题是跟随
正如作者所提到的"如果所有P-subsets都是从算命套装中取出并随意填写以完成门票,我们就会有一套十张票"因为在文章表中缺少任何人可以帮助我这里有什么10票?
在上面的例子中,如果1和3发生,如果我们没有选择{1,3,5}我们怎么能在这里获胜?
任何人都可以提出文章中缺少的图2吗?
谢谢!
void newHandler() {
cdebug << "memory allocation failure" << std::endl;
throw std::bad_alloc();
}
int main() {
std::set_new_handler(newHandler);
// ...
}
Run Code Online (Sandbox Code Playgroud)
一旦newHandler被建立为我们的错误处理程序,它将在任何堆分配失败时被调用.关于错误处理程序的有趣之处在于它会被连续调用,直到内存分配成功,或者函数抛出错误.
我对上面文本的问题是,"直到内存分配成功,或者函数抛出错误"时,authore的意思是什么.在这种情况下,函数如何抛出错误?要求举例说明.
谢谢你的时间和帮助.