给定一个具有成员模板函数的类,如下所示:
template <typename t>
class complex
{
public:
complex(t r, t im);
template<typename u>
complex(const complex<u>&);
private:
//what would be the type of real and imaginary data members here.
}
Run Code Online (Sandbox Code Playgroud)
我对成员模板功能感到困惑,请提供一个示例,通过该示例,我可以清楚地了解成员模板功能的需求.
另外,告诉我在c ++中使用成员模板函数,我们使用成员模板函数的情况是什么?
我对C++中的继承概念感到困惑,假设我们有一个名为computer的类,我们公开从计算机类继承了一个名为laptop的类.现在当我们在main函数中创建类laptop的对象时,内存中会发生什么?请解释.
因为我们在函数的参数列表中使用指针
void f(int *);
Run Code Online (Sandbox Code Playgroud)
这意味着此函数将接收指向整数的指针,
但这意味着什么
void f(int ***);
Run Code Online (Sandbox Code Playgroud)
和
void f(int **=0)
Run Code Online (Sandbox Code Playgroud) 假设我有一个功能模板StrCompare
template<typename T=NonCaseSenCompare>//NonCaseSenCompare is a user defined class look at the detailed code below.
int StrCompare(char* str1, char* str2)
{
...
}
Run Code Online (Sandbox Code Playgroud)
现在在主要功能我写了一行
char* str1="Zia";
char* str2="zia";
int result=StrCompare(str1,str2);
Run Code Online (Sandbox Code Playgroud)
它应该工作,因为我们提供了一个默认的模板参数,但它
没有
编译器给出以下错误
没有匹配函数调用`StrCompare(char*&,char*&)'现在详细的代码由下面给出
#include<iostream.h>
class CaseSenCompare
{
public:
static int isEqual(char x, char y)
{
return x==y;
}
};
class NonCaseSenCompare
{
public:
static int isEqual(char x,char y)
{
char char1=toupper(x);
char char2=toupper(y);
return char1==char2;
}
};
template<typename T=NonCaseSenCompare>
int StrCompare(char* str1, char* str2)
{
for(int i=0;i < strlen(str1)&& strlen(str2);i++) …Run Code Online (Sandbox Code Playgroud) 请看下面的程序,错误是无效的有效地址计算,我已经提到那行,请告诉我为什么这里无效的有效地址计算是程序
[org 0x100]
jmp start
array1: dw 10,15,20,25,30,35,40,45,50,55
array2: dw 15,10,20,35,40,30,55,50,25,45
start: mov bx,0
mov cx,0
loop: mov ax,[array2+bx]
cmp ax,[array1+cx]//here is the error invalid effective address calculation
jne NextElementOfArray1
NextElementOfArray2: add bx,2
cmp bx,20
je end
mov cx,0
jmp loop
NextElementOfArray1: add cx,2
cmp cx,20
je NextElementOfArray2
jmp loop
end: mov ax,0x4c00
int 0x21
Run Code Online (Sandbox Code Playgroud) 如果从较小的数中减去较大的数,则需要借位。进位标志在减法运算中起到借位的作用。现在假设我们要从 56 中减去 66,显然需要借位并设置进位标志。现在如何执行此减法以获得结果 -10,计算机将如何区分结果将是负数。请说明过程。
要计算AVL树中节点的平衡因子,我们需要找到其左子树的高度和右子树的高度.然后我们从其左子树的高度中减去右子树的高度:
balancefactor = leftsubtreeheigh - rightsubtreeheight
我的问题是:如何计算左子树或右子树的高度?
例如,在给定的图1中,根节点40的左子树的高度是4,右子树的高度40是2,因此高度的差是2.
我如何在C++中执行此操作?我不想使用递归,因为它非常令人困惑.使用显式堆栈而不是递归更容易理解.
1 该图已从imgur服务器中删除.
请查看以下代码.这有什么问题?编译器给出了这个错误:
在复制构造函数
person::person(person&)': No matching function for call toperson :: copy(char*&,char*&)'候选者是:void person :: copy(char*&,const char*&)"
这是代码:
class person
{
public:
person();
person(person &);
private:
void copy(char*&,const char*&);
char* name, *fathername,* address;
};
void person::copy( char*& n, const char*& p)
{
int result;
result=strcmp(n,p);
if(result!=0)
{
n=new char[strlen(p)+1];
strcpy(n,p);
n[strlen(p)]='\0';
}
}
person::person(person &object)
{
copy(name,object.name);
copy(fathername,object.fathername);
copy(address, object.address);
}
Run Code Online (Sandbox Code Playgroud)
从这个问题的答案来看,到目前为止我所理解的是:编译器不允许将引用转换为常量引用,因为引用已经是常量.它们不能指向像指针一样的不同内存位置.我对吗?
因为我们知道树是递归数据结构,我们使用recurrsion来编写树的程序,如BST的删除方法等
.复发的优点是,我们的程序变得非常小(例如,遍历遍历的代码只有4或者是5行)而不是非复原程序,这种程序虽然冗长但不像理解透视中的递归程序那么复杂.这就是为什么我讨厌复发,我更喜欢写非复原程序,我已经在二元serach树和avl树做了.
现在请详细说明,更喜欢非递归程序而不是复发程序是不好或好事."
尊敬的先生!
由于我还没有学过java,但是大多数人都说C++比Java有更多的OOP功能,我想知道c ++有哪些功能,java没有.请解释.