
创建一个对象时构造函数执行的顺序是:父类的成员变量->父类本身->子类的成员变量->子类本身。
B bb[2]; 这句话创建了两个B的对象,创建B时先执行父类A的构造函数,然后执行B的成员变量A aa的构造函数,最后执行B的构造函数。所以输出
"A's default called
"A's default called
"B's default called
"A's default called
"A's default called
"B's default called
bb[0]=B("abc0","abc1","abc2");
bb[1]=B("abc3","abc4","abc5");
这两句话构造了两个B的对象,调用的是B::B(char p1,char p2,char p3):A(p1),aa(p1)这个构造函数,而在这个构造函数中,指定了父类A的构造函数,在初始化列表中指定了成员变量aa的构造函数。同上面的构造顺序一样,所以输出
"A's constructor called
"A's constructor called
"B's constructor called
"A's constructor called
"A's constructor called
"B's constructor called
函数printb中,先调用print输出a,然后输出b和aa,在B的构造函数中,p1赋值给了a和aa,p3赋值给了b,所以按照输出顺序,应该是p1, p3, p1,所以输出为
abc0,abc2,abc0;
abc3,abc5,abc3
1 status algo1(Stack s){ ////定义函数 algo1, 参数为Stack类型,返回值status类型
int i,n ,A[255]; //定义变量
n=0;
while (!StackEmpty(s)) {n++;Pop(S,A[n]);} //如果栈不空,栈顶元素出栈,放在A[n]里面,n++,指向数组下一个位置,同时记录了个数
for (i=1,i<=n;i++) push(S,A[i]; //将出栈的所有元素再入栈
}
你这里有两个程序,第二个程序与第一个实质上是一样的,区别就是信号与导向矢量的写法有点不同,这里我就不注释了。还有,我下面附了一段我自己的写的程序,里面有SIM算法。G-S正交化算法等。是基于圆阵形式的,你的算法是基于线阵的,他们程序上的区别在于导向矢量的不同。我的算法是某项目中的,保证好使。建议学习波束形成技术,注意把程序分块,例如分成,求导向矢量;最优权值;形成波束等等。
程序如下:
4单元均匀线阵自适应波束形成图
clear
clc
format long;
v=1;
M=4;
N=1000;%%%%%%%快拍数
f0=2110^3;%%%%%%%%%%%信号与干扰的频率
f1=1110^3;
f2=1510^3;
omiga0=2pif0;%%%%%%%信号与干扰的角频率
omiga1=2pif1;
omiga2=2pif2;
sita0=08; %信号方向
sita1=04; %干扰方向1
sita2=21; %干扰方向2
for t=1:N %%%%%%%%%%%%信号
adt(t)=sin(omiga0t/(Nf0));
a1t(t)=sin(omiga1t/(Nf1));
a2t(t)=sin(omiga2t/(Nf2));
end
for i=1:M %%%%%%%%%%%%信号的导向矢量:线阵的形式
ad(i,1)=exp(j(i-1)pisin(sita0));
a1(i,1)=exp(j(i-1)pisin(sita1));
a2(i,1)=exp(j(i-1)pisin(sita2));
end
R=zeros(M,M);
for t=1:N
x=adt(t)ad+a1t(t)a1+a2t(t)a2; %阵列对信号的完整响应
R=R+xx';%信号的协方差矩阵
end
R=R/N;%%%%%%%%%协方差矩阵,所有快拍数的平均
miu=1/(ad'inv(R)ad);%%%%%%这个貌似是LMS算法的公式,具体我记不太清,这里是求最优权值,根据这个公式求出,然后加权
w=miuinv(R)ad;
%%%%%%形成波束%%%%%%%%%%%%%%%%%%%
for sita=0:pi/100:pi
for i=1:M
x_(i,1)=exp(j(i-1)pisin(sita));
end
y(1,v)=w'x_;%%%%%%%对信号进行加权,消除干扰
v=v+1;
end
y_max=max(y(:));%%%%%%%%%%%%%%%归一化
y_1=y/y_max;
y_db=20log(y_1);
sita=0:pi/100:pi;
plot(sita,y)
Xlabel(‘sitaa’)
Ylabel(‘天线增益db’)
4单元均匀线阵自适应波束形成
目标
clear
clc
format long;
v=1;
M=4;阵元数
N=100;
f0=2110^3;
omiga0=2pif0;
sita0=06;%信号方向
for t=1:N
adt(t)=sin(omiga0t/(Nf0));
end
for i=1:M
ad(i,1)=exp(j(i-1)pisin(sita0));
end
R=zeros(4,4);
r=zeros(4,1);
for t=1:N
x=adt(t)ad;
R=R+xx';
end
R=R/N;
miu=1/(ad'inv(R)ad);
w=miuinv(R)ad;
for sita=0:pi/100:pi/2
for i=1:M
a(i,1)=exp(j(i-1)pisin(sita));
end
y(1,v)=w'a;
v=v+1;
end
sita=0:pi/100:pi/2;
plot(sita,y)
xlabel('sita')
ylabel('天线增益’)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%我的程序%%%%%%%%%%%%%%%
function jieshousignal
%期望信号数:1个
%干扰信号数:4个
%信噪比已知
%干燥比已知
%方位角已知
clc;
clear all;
close all;
%//参数设置===========================================
>
#include<stdioh>
#include<stringh>
#define Max 100
class Bank
{
int top; //类似于栈的方式,栈顶
char date[Max][10]; // 日期
int money[Max]; // 金额
int rest[Max]; // 余额 这些都是临时存放用的空间
static int sum; // 累计余额
public:
Bank(){top=0;} //初始化栈顶为0
void bankin(char d[],int m) //存入的信息
{
strcpy(date[top],d); //把参数也就是下面用到的前面的日期部分复制到当前top所指的date里
money[top]=m; //把钱存放进去
sum=sum+m; //总收入增加
rest[top]=sum; //余额就是sum
top++; //增加栈顶
}
void bankout(char d[],int m) //类似于上面的函数,只不过加变成减
{
strcpy(date[top],d);
money[top]=-m;
sum=sum-m;
rest[top]=sum;
top++;
}
void disp();
};
int Bank::sum=0; //余额初始化为0
void Bank::disp() //显示所有的交易信息
{
int i;
printf(" 日期存入 取出余额\n");
for(i=0;i<top;i++)
{
printf("%8s",date[i]);
if(money[i]<0)
printf(" %6d",-money[i]);
else
printf("%6d ",money[i]);
printf("%6d\n",rest[i]);
}
}
void main()
{
Bank obj; //新建类
objbankin("200125",1000); //存入,取出的 *** 作,最后显示
objbankin("200132",2000);
objbankout("200141",500);
objbankout("200145",800);
objdisp();
}
首先,你要先明白,这个程序有两部分组成:函数fun()和主函数main();main()调用fun()函数实现算法运算。
首先介绍主函数main():主要负责打印输出结果,for循环由k控制,连着调用fun()函数两次,并打印。
fun()函数:实现算法运算。
第一次调用:x == 1(参数a的值), z == 4(在z++后), y==1(在y++后),所以此时返回值(x + y + z) = 6
第二次调用:x == 1(参数a的值), z == 5(在第一次z++后,本次有执行了一次z++), y==2(在第一次y++后,本次有执行了一次y++),所以此时返回值(x + y + z) = 8
直接运行了一次你的代码,输出结果如下:
注意事项以及建议:
1、这个道题目我觉得是对static的考察。
2、static 修改的变量在整个程序生命周期内只会被定义一次,并且在程序生命周期结束前,其上次的运行结果会被保存,供下次使用。
3、在fun()函数中, y,z是static类型。
如果以上问题对你有帮助,请采纳一下,谢谢。
以上就是关于C++请教程序详解全部的内容,包括:C++请教程序详解、我是初学者,帮忙详细解释下这个程序~、MATLAB 程序详解(关于波束形成)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)