标签: pointers

在C++中为抽象类模板创建接口

我有如下代码.我有一个抽象模板类Foo和两个子类(Foo1和Foo2),它们派生自模板的实例化.我希望在我的程序中使用指向Foo1或Foo2类型的对象的指针,因此我创建了一个接口IFoo.

我的问题是我不确定如何在界面中包含functionB,因为它依赖于模板实例化.甚至可以通过界面使functionB可访问,还是我尝试不可能?

非常感谢您的帮助.

class IFoo {
    public:
        virtual functionA()=0;

};

template<class T>
class Foo : public IFoo{
    public:
        functionA(){ do something; };
        functionB(T arg){ do something; };
};

class Foo1 : public Foo<int>{
...
};

class Foo2 : public Foo<double>{
...
};
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates pointers interface

22
推荐指数
4
解决办法
3万
查看次数

C++ typedef解释const指针

首先,示例代码:

情况1:


typedef char* CHARS;
typedef CHARS const CPTR;   // constant pointer to chars
Run Code Online (Sandbox Code Playgroud)

文本替换CHARS变为:


typedef char* const CPTR;   // still a constant pointer to chars
Run Code Online (Sandbox Code Playgroud)

案例2:


typedef char* CHARS;
typedef const CHARS CPTR;   // constant pointer to chars
Run Code Online (Sandbox Code Playgroud)

文本替换CHARS变为:


typedef const char* CPTR;   // pointer to constant chars
Run Code Online (Sandbox Code Playgroud)

在案例2中,在文本替换CHARS之后,typedef的含义发生了变化.为什么会这样?C++如何解释这个定义?

c++ pointers typedef const

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

当指针递增时,'free'如何工作

当调用malloc时,大小存储在已分配的块附近,以便free可以知道要释放多少等等(http://c-faq.com/malloc/freesize.html).

我的问题是,假设我们已经动态分配了内存,稍后在代码中我们增加了指针

 pointer++
Run Code Online (Sandbox Code Playgroud)

然后,如果我打电话给

free(pointer) 
Run Code Online (Sandbox Code Playgroud)

实际上释放了什么内存.

它是从"指针"指向的当前地址开始分配的字节数,还是从已分配的基址开始的.

c pointers

21
推荐指数
3
解决办法
4108
查看次数

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

是否可以使用指针链接列表实现?

我的问题很简单,可以使用C++,实现链接列表数据结构而不使用指针(下一个节点)吗?为了进一步限定我的问题,我的意思是可以只使用类实例创建一个Linked-List数据结构.

常见的节点定义可能如下:

template<typename T>
struct node
{
   T t;
   node<T>* next;
   node<T>* prev;
};
Run Code Online (Sandbox Code Playgroud)

我知道std::list等等,我只是想知道它是否可能 - 如果是这样的话怎么样?代码示例将不胜感激.

更多说明:

  1. 插入应为O(1).
  2. 遍历不应超过O(n).
  3. 真实节点和空节点应该是可区分的.
  4. 链表的大小应仅受可用内存量的限制.

c++ pointers linked-list

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

请解释C中指针的含糊不清?

#include<stdio.h>
main()
{ int x[3][5]={{1,2,10,4,5},{6,7,1,9,10},{11,12,13,14,15}};


printf("%d\n",x); 
printf("%d\n",*x); }
Run Code Online (Sandbox Code Playgroud)

这里首先printf将打印第一个元素的地址.那么为什么第二个printf不会在地址x处输出值,即第一个值.要打印我需要写的值**x.

c pointers

21
推荐指数
2
解决办法
7614
查看次数

将C++函数指针转换为c函数指针

我正在使用C库开发C++应用程序.我必须向C库发送一个函数指针.

这是我的班级:

 class MainWindow : public QMainWindow {  
     Q_OBJECT  
     public:  
     explicit MainWindow(QWidget *parent = 0);  
     private:  
     Ui::MainWindow *ui;
     void f(int*);

 private slots:
     void on_btn_clicked(); 
};
Run Code Online (Sandbox Code Playgroud)

这是我的on_btn_clicked函数:

void MainWindow::on_btn_clicked()
{
    void (MainWindow::* ptfptr) (int*) = &MainWindow::f;

    c_library_function(static_cast<void()(int*)>(ptfptr), NULL);

}
Run Code Online (Sandbox Code Playgroud)

C函数应该得到一个指向这样一个函数的指针:void f(int*).但上面的代码不起作用,我无法成功将我的f成员函数转换为所需的指针.

有人可以帮忙吗?

c c++ pointers function-pointers

21
推荐指数
4
解决办法
2万
查看次数

使用带有数组和指针的sizeof的实验

对于该计划:

#include<stdio.h>
int main(void)
{

    int (*a)[2];
    int b[5];

    printf("sizeof(int) : %zu\n", sizeof(int)); 
    printf("sizeof(int*) : %zu\n", sizeof(int*));

    printf("sizeof(b) : %zu\n",sizeof(b));
    printf("sizeof((int*)b) : %zu\n",sizeof((int*)b));
    printf("sizeof(&b[0]) : %zu\n",sizeof(&b[0]));

    printf("sizeof(a) : %zu\n",sizeof(a));
    printf("sizeof(a[0]) : %zu\n",sizeof(a[0]));
    printf("sizeof(a[1]) : %zu\n",sizeof(a[1]));

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

sizeof(int) : 4 -> Fact 1
sizeof(int*) : 8 -> Fact 2
sizeof(b) : 20 -> Case 1
sizeof((int*)b) : 8 -> Case 2
sizeof(&b[0]) : 8 -> Case 3
sizeof(a) : 8 -> Case 4
sizeof(a[0]) : 8 -> Case …
Run Code Online (Sandbox Code Playgroud)

c arrays pointers sizeof

21
推荐指数
2
解决办法
653
查看次数

指向2D数组的指针的类型是什么?

我知道以下内容不正确:

int arr[2][3] = {}; //some array initialization here
int** ptr;
ptr = arr;
Run Code Online (Sandbox Code Playgroud)

但我很惊讶以下几行确实有效

int arr[2][3] = {}; //some array initialization here
auto ptr = arr;
int another_arr[2][3] = {}; //some array initialization here
ptr = another_arr;
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释在第二个代码块中分配给ptr的类型是什么,以及下面发生了什么?

c++ arrays pointers multidimensional-array c++11

21
推荐指数
3
解决办法
2975
查看次数

如何在C++中定义一个const指针数组?

有没有办法定义一个指针数组,以便任何指针是const?

例如,可以char** array定义array[0]为const和array[1]const等,但是array非const并且array[j][i]是非const?

c++ arrays pointers const c++11

21
推荐指数
2
解决办法
1781
查看次数