C++请教程序详解

C++请教程序详解,第1张

创建一个对象时构造函数执行的顺序是:父类的成员变量->父类本身->子类的成员变量->子类本身。

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 程序详解(关于波束形成)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9869082.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-02
下一篇2023-05-02

发表评论

登录后才能评论

评论列表(0条)

    保存