我有如下代码.我有一个抽象模板类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) 首先,示例代码:
情况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++如何解释这个定义?
当调用malloc时,大小存储在已分配的块附近,以便free可以知道要释放多少等等(http://c-faq.com/malloc/freesize.html).
我的问题是,假设我们已经动态分配了内存,稍后在代码中我们增加了指针
pointer++
Run Code Online (Sandbox Code Playgroud)
然后,如果我打电话给
free(pointer)
Run Code Online (Sandbox Code Playgroud)
实际上释放了什么内存.
它是从"指针"指向的当前地址开始分配的字节数,还是从已分配的基址开始的.
数组是否默认通过ref或value传递?谢谢.
我的问题很简单,可以使用C++,实现链接列表数据结构而不使用指针(下一个节点)吗?为了进一步限定我的问题,我的意思是可以只使用类实例创建一个Linked-List数据结构.
常见的节点定义可能如下:
template<typename T>
struct node
{
T t;
node<T>* next;
node<T>* prev;
};
Run Code Online (Sandbox Code Playgroud)
我知道std::list等等,我只是想知道它是否可能 - 如果是这样的话怎么样?代码示例将不胜感激.
更多说明:
#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库开发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成员函数转换为所需的指针.
有人可以帮忙吗?
对于该计划:
#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) 我知道以下内容不正确:
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的类型是什么,以及下面发生了什么?
有没有办法定义一个指针数组,以便任何指针是const?
例如,可以char** array定义array[0]为const和array[1]const等,但是array非const并且array[j][i]是非const?