c++.类的参数变化
C++. 1Class with changing parameters
我有一个类,有3个私有变量和一个公共方法,有2个字符参数变量。
class InitLine
{
private:
char *a;
char b, c;
public:
InitLine(char *inita, char initc);
Init(char *a, char c);
};
现在方法的定义很简单:
Initline::Init(char *a, char c)
{
for (b=0; b<c; b++)
*(a+c)=0;
}
现在我的问题是:如果我希望用不同的参数类型(*a和c,或者其中一个成为整数)重复相同的动作,是否有必要创建一个新类,或者我可以使用现有的一个,做一些"类型转换"或其他一些技巧,我还不知道?
Thanks and regards
乌维
使用模板,使Init函数成为你的参数类型的模板。
template <typename T>
Init(char*a , T c){}
例如您的代码中有许多地方应该在进行任何进一步操作之前进行修复。
-
命名约定很糟糕。
a
,b
,c
是什么? -
您使用
b
作为循环索引器,而应该在那里使用局部变量。 -
你没有告诉我们是什么
a
。它被分配到哪里?a
所指向的内存大小是多少?
class InitLine
{
private:
char * data;
int count;
public:
InitLine(char * newData, int newCount)
{
// Possible error checking?
data = newData;
count = newCount;
}
// No parameters needed here, I guess
void Init()
{
for (int i = 0; i < count; i++)
data[i] = 0;
}
};
关于你的问题,我不是很确定,你想达到什么目的,你想知道什么。如果你想编写一个包含任何类型数组的泛型类,你必须使用模板:
template <typename T>
class InitLine
{
private:
T * data;
int count;
public:
InitLine(T * newData, int newCount)
{
// Possible error checking?
data = newData;
count = newCount;
}
// No parameters needed here, I guess
void Init()
{
for (int i = 0; i < count; i++)
data[i] = 0;
}
};
你必须按照以下方式使用这个类:
InitLine<char> line(myData, myDataSize);
// where myData is a char * and myDataSize is an int
如果你想写一些不同于参数的方法,这种技术被称为方法重载,在c++中是可用的:
void Init(char * a, int b) { /* sth */ }
void Init(int * a, int b) { /* sth */ }
注意,编译器必须能够清楚地区分应该调用哪个方法。如:
void Test(int a) { }
void Test(char a) { }
Test(0); // Ambiguity: which method should be called?
这些都是我读你的问题时想到的。如果这不是你想问的,考虑把问题修改得更具体一些。
如果你只是想让整个类具有不同的类型(不仅仅是Init),例如也有int *a;int b, c;模板类是另一个你还不知道的技巧。
template <typename ANYTYPE> class InitLine
{
private:
ANYTYPE *a;
ANYTYPE b, c;
public:
void InitLine(ANYTYPE *inita, ANYTYPE initc);
void Init(ANYTYPE *a, ANYTYPE c);
};
template <typename ANYTYPE> void Initline<ANYTYPE>::Init(ANYTYPE *a, ANYTYPE c)
{
for (int b=0; b<c; b++)
*(a+c)=0;
}
... main()
{
Initline<int> iline; // initline class based on type int (ANYTYPE -> int)
int line[20];
Initline<char> cline; // initline class based on type char (ANYTYPE -> char)
char somechars[30];
iline.Init(line, 20);
cline.Init(somechars, 30);
相关文章:
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 派生类中函数参数变化的虚函数按常量类型在"function parameter"会破坏虚拟机制吗?
- 将模板变化函数及其参数传递到一个函数
- 指针参数根据输出而变化
- C 传递功能,将参数数量变化为参数到其他函数
- 局部变量的内存地址根据 lambda 参数的预感而变化
- 基于不断变化的参数/变量的XML get值
- c++.类的参数变化
- 为什么在嵌套调用中参数值发生变化并导致分段错误
- C++,vsprintf 处理不断变化的参数数量和大幅面字符串
- 我如何使用tr1函数和绑定函数的变化参数