小编Pau*_*ton的帖子

如何从派生类函数调用父类函数?

如何使用C++从派生类调用父函数?例如,我有一个名为的类parent,以及一个child从父派生的类.每个班级都有一个print功能.在孩子的打印功能的定义中,我想调用父母的打印功能.我该怎么做呢?

c++ oop inheritance

563
推荐指数
6
解决办法
59万
查看次数

数组应该在C++中使用吗?

由于std::liststd::vector存在,是有什么原因在C++中使用传统的C数组,还是应该尽量避免,只是喜欢malloc

c++ arrays conventions

95
推荐指数
5
解决办法
2万
查看次数

为什么不能使三元运算符超载?

为什么不能使三元运算符超载?:'?

我经常使用三元运算符来合并if语句,并且很好奇为什么语言设计者选择禁止此运算符过载.我找到了解释为什么在C++运算符重载但未找到描述为什么这是不可能的解释.脚注提供的唯一信息是它不能超载.

我最初的猜测是,重载运算符几乎总是违反上面链接中给出的第一或第二原则.重载的含义很少是明显的或明显的,或者它将偏离其原始的已知语义.

所以我的问题更多的是为什么这不可能而不是如何,因为我知道它无法完成.

c++ operator-overloading operators ternary-operator visual-c++

19
推荐指数
3
解决办法
8958
查看次数

静态数组与动态数组的C/C++性能

当性能对应用程序至关重要时,应该考虑是否在堆栈上声明一个数组而不是堆?请允许我概述为什么会出现这个问题.

由于C/C++中的数组不是对象并且衰减为指针,因此编译器使用提供的索引来执行指针算法来访问元素.我的理解是,当经过第一个维度时,此过程静态声明的数组不同,是动态声明的数组.

如果我要在堆栈上声明一个数组,如下所示;

  int array[2][3] = { 0, 1, 2, 3, 4, 5 }
  //In memory        { row1 } { row2 }
Run Code Online (Sandbox Code Playgroud)

该数组将以行主格式存储在内存中,因为它存储在连续的内存块中.这意味着当我尝试访问数组中的元素时,编译器必须执行一些加法和乘法才能确定正确的位置.

所以如果我要做以下事情

  int x = array[1][2]; // x = 5
Run Code Online (Sandbox Code Playgroud)

然后编译器将使用以下公式:

i =行索引j =列索引n =单行的大小(此处n = 2)
array =指向第一个元素的指针

  *(array + (i*n) + j)
  *(array + (1*2) + 2)  
Run Code Online (Sandbox Code Playgroud)

这意味着如果我循环遍历此数组以访问其每个元素,则通过索引对每个访问执行额外的乘法步骤.

现在,在堆上声明的数组中,范例是不同的,需要一个多阶段解决方案.注意:我也可以在这里使用C++ new运算符,但我相信数据的表示方式没有区别.

  int ** array;
  int rowSize = 2;
  // Create a 2 by 3 2d array on the heap
  array = malloc(2 * …
Run Code Online (Sandbox Code Playgroud)

c c++ memory performance data-structures

18
推荐指数
1
解决办法
2万
查看次数

图像地图无法在Firefox中运行!在Chrome + Safari中运行良好

我做了一个图像映射,它不能在Firefox中工作.它适用于Chrome和Safari.

这是网站bryanedwardcollins.com

请帮忙!

    <MAP NAME="menumap" >
<AREA 
HREF="contact.html" ALT="contact" 
SHAPE="POLY" COORDS="425,100, 572,89, 594,142, 488,150, 460,166, 423,100">
    <AREA
    HREF="insameit.html" ALT="insame i.t." 
    SHAPE="POLY" COORDS="382,239, 462,245, 461,343, 608,344, 610,395, 354,405, 354,341">
    <AREA
    HREF="floorpart.html" ALT="floor part" 
    SHAPE="POLY" COORDS="307,185, 429,185, 430,221, 379,222, 374,235, 283,224">
    <AREA
    HREF="iouse.html" ALT="I O Use" 
    SHAPE="POLY" COORDS="27,18, 231,16, 243,0, 382,0, 253,265, 69,252, 193,73, 27,73">
    <AREA
    HREF="worldpart.html" ALT="world part" 
    SHAPE="POLY" COORDS="25,303, 122,305, 122,448, 27,449">
    </MAP>
Run Code Online (Sandbox Code Playgroud)

html imagemap cross-browser

14
推荐指数
1
解决办法
1万
查看次数

Excel VBA按名称引用QueryTable对象

我正在开发一个带有VBA的MS Excel 2013工具,它涉及使用QueryTables.我遇到的一个不便是访问Excel工作表中的现有 QueryTables.目前,我可以找到访问查询表的唯一方法是通过整数索引.我提出了以下代码,以便快速验证概念

Sub RefreshDataQuery()

Dim querySheet As Worksheet
Dim interface As Worksheet

Set querySheet = Worksheets("QTable")
Set interface = Worksheets("Interface")

Dim sh As Worksheet
Dim QT As QueryTable

Dim startTime As Double
Dim endTime As Double

Set QT = querySheet.ListObjects.item(1).QueryTable

startTime = Timer
QT.Refresh
endTime = Timer - startTime

interface.Cells(1, 1).Value = "Elapsed time to run query"
interface.Cells(1, 2).Value = endTime
interface.Cells(1, 3).Value = "Seconds"

End Sub
Run Code Online (Sandbox Code Playgroud)

这有效,但我真的不想这样做.最终产品工具最多有五个不同的QueryTable.我想要的是通过名称引用QueryTable.

如果我能翻译下面的代码,那会更好

Set QT = querySheet.ListObjects.item(1).QueryTable
Run Code Online (Sandbox Code Playgroud)

对于某些事情

Set QT = …
Run Code Online (Sandbox Code Playgroud)

excel vba

12
推荐指数
2
解决办法
3万
查看次数

未定义模板'std :: __ 1 :: array <int,3>'的隐式实例化

我复制并粘贴了这个确切的代码,在这里找到我的IDE,并得到一个错误,我不明白它为什么会发生,并想知道为什么.

std::array<int, 3> a2 = {1, 2, 3}; // except after =
Run Code Online (Sandbox Code Playgroud)

c++ arrays

11
推荐指数
1
解决办法
1万
查看次数

当我们有ArrayLists时,为什么了解Arrays很重要?

我很好奇为什么在使用ArrayLists时使用Arrays?使用ArrayList不总是更好吗?

java arrays data-structures

8
推荐指数
1
解决办法
1494
查看次数

调试日志语句的预处理器宏是否在C++中占有一席之地?

最近我一直在阅读Scott Meyers的Effective C++ Second Edition,以改进C++最佳实践.他列出的一个项目鼓励C++程序员避免使用预处理器宏并且"更喜欢编译器".他说,除了#include和#ifdef/#ifndef之外,C++中几乎没有宏的原因.

我同意他的推理,因为你可以完成以下宏

#define min(a,b) ((a) < (b) ? (a) : (b))
Run Code Online (Sandbox Code Playgroud)

具有以下C++语言功能

template<class T>
inline const T & min(const T & a, const T & b) {
    return a < b ? a : b;
}
Run Code Online (Sandbox Code Playgroud)

其中inline为编译器提供了删除函数调用和插入内联代码和模板的选项,该代码和模板可以处理具有重载或内置>运算符的多种数据类型.

编辑 -如果a和b的数据类型不同,则此模板声明将不会与所述宏完全匹配.有关示例,请参阅Pete的评论.

但是,我很想知道使用宏进行调试日志记录是否是C++中的有效用法.如果我在下面提出的方法不是很好的做法,那么有人会建议另一种方法吗?

我去年在Objective-C中进行了编码,我最喜欢的2D引擎之一(cocos2d)利用宏来创建日志语句.宏如下:

/*


* if COCOS2D_DEBUG is not defined, or if it is 0 then
 *  all CCLOGXXX macros will be disabled
 *
 * if COCOS2D_DEBUG==1 then:
 *      CCLOG() will be enabled
 *      CCLOGERROR() will be …
Run Code Online (Sandbox Code Playgroud)

c++ debugging macros logging c-preprocessor

6
推荐指数
1
解决办法
1605
查看次数

为什么我无法覆盖虚拟功能?

我试图覆盖 Vector_container 中的大小函数,但 IDE 告诉我“标记为‘覆盖’的非虚拟成员函数隐藏虚拟成员函数”

class Container {
public:
    virtual double& operator[](int) = 0;     // pure virtual function
    virtual int size() const = 0;            // const member function (§4.2.1)
    virtual ~Container() {}                  // destructor (§4.2.2)
};


class Vector_container : public Container {   // Vector_container implements Container
public:
    Vector_container(int s) : v(s) { }   // Vector of s elements
    ~Vector_container() {}

    double& operator[](int i) override { return v[i]; }
    int size() override { return v.size(); }
private:
    Vector v;
};
Run Code Online (Sandbox Code Playgroud)

但它不是一个虚函数吗?

c++ polymorphism inheritance overriding constants

6
推荐指数
1
解决办法
1403
查看次数