请问为啥我这个不能打印出来东西啊

#include
#include
using namespace std;
class B0{
public:
virtual void print()=0;
};
class D_r:public B0//矩形派生类
{
int r,c;//r:矩形的高,c:矩形的宽
public:
D_r(int r,int c);
void print()
{
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cout<<"*";
}
cout<<endl;
}
}
};
D_r::D_r(int r,int c)//等腰三角形类
{
r=r;
c=c;
}
class D_rt:public B0{
int a;
public:
D_rt(int a);
void print(){
for(int i=0;i<a;i++)
{
cout<<setw(i+1);
for(int j=0;j<a;j++)
{
cout<<"*";
}
cout<<endl;
}
}
};
D_rt::D_rt(int a)
{
a=a;
}
void output(B0*p){
p->print();
}
int main()
{
D_r d(2,4);
D_rt rt(4);
output(&d);
output(&rt);
return 0;
}

D_r::D_r(int r,int c)//等腰三角形类
{
r=r;
c=c;
}

改成

D_r::D_r(int a,int b)//等腰三角形类
{
r=a;
c=b;
}

你不能把函数参数名和要赋值的属性名取一样的,不然怎么分得清呢

使用this->关键字进行特指,建议改成如下的实例化函数:

D_r::D_r(int r, int c)//等腰三角形类
{
    this->r = r;
    this->c = c;
}
D_rt::D_rt(int a)
{
    this->a = a;
}