在我的代码中,我使用了三个类。所有的类都在单独的文件中。我Makefile
用来编译和链接它们。请参阅下面的实现:
class Medicine
{
int a;
}
class Pain:public Medicine
{
int b;
}
class Comb:public Pain
{
string salt,com;
}
call()
在所有三个类中,所有类都只有参数化的构造函数、虚拟析构函数和同名函数。call()
就像_
call()
{
cout<<"You are in class the_name_of_the_class"<<endl;
}
的代码main.cpp
如下:
int main()
{
Medicine *p[2];
p[0]= new Comb("Salt","Com",2,110);
p[1]= new Comb("SALT","COM",1,100);
p[0]->call();
delete p[0];
delete p[1];
return 0;
}
当我运行这个程序时,我得到了预期的输出。但是当我将 Medicine::call() 更改为虚拟函数并再次使用make
命令时,它说所有文件都是最新的。正如我已经修改medicine.h
的那样,make
应该创建新版本的medicine.o
. 为什么medicine.o
在我修改后将旧版本视为已更新medicine.h
?
Makefile 是这样的:
using .PHONY:clean
OBJ:=medicine.o pain.o comb.o main.o
SOU:=medicine.cpp pain.cpp comb.cpp main.cpp
main:$(OBJ)
g++ -o $@ $^
%.o:%.cpp
g++ -c -o $@ $<
clean:
rm *.o main
如果你想查看medicine.h的实现,
class Medicine
{
int cost;
public:
int getCost();
void setCost(int);
Medicine();
Medicine(int);
Medicine(Medicine &a);
virtual string getCompany(){};
virtual string getSalt(){};
virtual ~Medicine ();
virtual void call();
};
我medicine.h
已将其包含在 中medicine.cpp
,其中定义了所有这些功能。