我试图将类中的成员函数传递给一个带有成员函数类指针的函数.我遇到的问题是我不确定如何使用this指针在类中正确执行此操作.有没有人有建议?
这是传递成员函数的类的副本:
class testMenu : public MenuScreen{
public:
bool draw;
MenuButton<testMenu> x;
testMenu():MenuScreen("testMenu"){
x.SetButton(100,100,TEXT("buttonNormal.png"),TEXT("buttonHover.png"),TEXT("buttonPressed.png"),100,40,&this->test2);
draw = false;
}
void test2(){
draw = true;
}
};
Run Code Online (Sandbox Code Playgroud)
函数x.SetButton(...)包含在另一个类中,其中"object"是模板.
void SetButton(int xPos, int yPos, LPCWSTR normalFilePath, LPCWSTR hoverFilePath, LPCWSTR pressedFilePath, int Width, int Height, void (object::*ButtonFunc)()) {
BUTTON::SetButton(xPos, yPos, normalFilePath, hoverFilePath, pressedFilePath, Width, Height);
this->ButtonFunc = &ButtonFunc;
}
Run Code Online (Sandbox Code Playgroud)
如果有人对如何正确发送此功能有任何建议,以便我以后可以使用它.
我习惯于做Java编程,在编程时你永远不必考虑指针.但是,目前我正在用C++编写程序.在创建具有其他类成员的类时,何时应该使用指针,何时不应该使用指针?例如,我什么时候想要这样做:
class Foo {
Bar b;
}
Run Code Online (Sandbox Code Playgroud)
与此相反:
class Foo {
Bar* b;
}
Run Code Online (Sandbox Code Playgroud) 我知道,我们有不同的指针一样int,float和char.一个void指针是可以容纳所有其他的唯一指针.
其他指针是否存在只是为了灵活地进行指针运算?
除了voidC语言之外的其他指针还有其他原因吗?
我正在寻求通过编写示例软件渲染器来提高我的C++技能.它采用由3d空间中的点组成的对象,并将它们映射到2d视口,并为视图中的每个点绘制不同大小的圆.哪个更好:
class World{
vector<ObjectBaseClass> object_list;
public:
void generate(){
object_list.clear();
object_list.push_back(DerivedClass1());
object_list.push_back(DerivedClass2());
Run Code Online (Sandbox Code Playgroud)
要么...
class World{
vector<ObjectBaseClass*> object_list;
public:
void generate(){
object_list.clear();
object_list.push_back(new DerivedClass1());
object_list.push_back(new DerivedClass2());
Run Code Online (Sandbox Code Playgroud)
?? 在第二个例子中使用指针来创建新对象会破坏使用向量的点,因为向量会在第一个示例中自动调用DerivedClass析构函数而不是在第二个示例中调用DerivedClass析构函数吗?在使用向量时是否需要指向新对象的指针,因为只要您使用其访问方法,它们本身就会处理内存管理?现在让我们说我在世界上有另一种方法:
void drawfrom(Viewport& view){
for (unsigned int i=0;i<object_list.size();++i){
object_list.at(i).draw(view);
}
}
Run Code Online (Sandbox Code Playgroud)
调用时,这将为世界列表中的每个对象运行draw方法.假设我希望派生类能够拥有自己的draw()版本.为了使用方法选择器( - >),列表是否需要指针?
在各种代码中,我已经看到调试版本中的内存分配NULL...
memset(ptr,NULL,size);
Run Code Online (Sandbox Code Playgroud)
或者0xDEADBEEF......
memset(ptr,0xDEADBEEF,size);
Run Code Online (Sandbox Code Playgroud)
0xDEADBEEF,是否仍然不符合有效数据?我正在研究K&R(例如5-9),我试图转换原始程序的2D数组
static char daytab[2][13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
Run Code Online (Sandbox Code Playgroud)
使用指针指向13个整数的数组
static char (*daytab)[13] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
Run Code Online (Sandbox Code Playgroud)
但编译器会打印警告:标量初始化程序中的多余元素.
谷歌搜索没有帮助,甚至K&R在将数组传递给函数时写道,
myFunction(int daytab[2][13]) {...}
Run Code Online (Sandbox Code Playgroud)
是相同的
myFunction(int (*daytab)[13]) {...}
Run Code Online (Sandbox Code Playgroud) 我想将B int数组指针传递给func函数,并能够从那里更改它,然后查看main函数中的更改
#include <stdio.h>
int func(int *B[10]){
}
int main(void){
int *B[10];
func(&B);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我一些错误:
In function 'main':|
warning: passing argument 1 of 'func' from incompatible pointer type [enabled by default]|
note: expected 'int **' but argument is of type 'int * (*)[10]'|
Run Code Online (Sandbox Code Playgroud)
编辑:新代码:
#include <stdio.h>
int func(int *B){
*B[0] = 5;
}
int main(void){
int B[10] = {NULL};
printf("b[0] = %d\n\n", B[0]);
func(B);
printf("b[0] = %d\n\n", B[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
现在我得到这些错误:
||In function 'func':|
|4|error: invalid type …Run Code Online (Sandbox Code Playgroud) 如果我有这个代码,例如:
int num = 5;
int *ptr = #
Run Code Online (Sandbox Code Playgroud)
以下两个功能有什么区别?
void func(int **foo);
void func(int *foo);
Run Code Online (Sandbox Code Playgroud)
我在哪里调用函数:
func(&ptr);
Run Code Online (Sandbox Code Playgroud)
我意识到前两者采用指针作为参数指针,而第二种只采用指针.
如果我传入func(&ptr),我实际上是在传入一个指针.指针指向另一个指针有什么区别?
我相信后者会给出一个不兼容的警告,但只要你知道你在做什么,似乎细节无关紧要.似乎可能为了可读性和理解,前者是更好的选择(2星指针),但从逻辑的角度来看,有什么区别?
例如,
class Person{
string name;
public:
T& operator*(){
return name;
}
bool operator==(const Person &rhs){
return this->name == rhs.name;
}
bool operator!=(const Person &rhs){
return !(*this == rhs); // Will *this be the string name or the Person?
}
}
Run Code Online (Sandbox Code Playgroud)
如果*this最终提领this的string,而不是一个Person,是有维持的使用一种解决方法*作为类外引用操作?
如果我*不放弃而不放弃使用,那将是一个很大的障碍*this.
我搜索并搜索了一个答案,但找不到任何我真正"得到"的东西.
我对c ++非常陌生,无法理解使用双指针,三指针等等.他们有什么意义?
任何人都可以启发我