我有一个用C++编写的功课来编写一所大学.我有两个主要的抽象类学生和课程.在课程中,有不同的子课程,如SoftwareEngineering课程等.在学生中,有不同的子课程,如SoftwareEngineering学生课程等.
现在,在课程子课程中,每个子课程都具有注册学生的功能
void register(Student &s);
Run Code Online (Sandbox Code Playgroud)
当我调用每个课程子类的函数寄存器(例如软件工程课程类)时,我想将该学生引用推送到向量中.但是我得到了错误
cannot allocate an object of abstract type 'Student'
Run Code Online (Sandbox Code Playgroud)
Student类是抽象的,并且有子类SoftwareEngineeringStudent等.但我 - 必须让寄存器功能得到一个抽象对象学生,而不是像SoftwareEngineeringStudent那样的特定类型的学生.
有可能解决这个问题吗?
这是一个骨架(当然不是完整的代码!):
//Course.h
class Course{
virtual void reg(Student &s)=0
}
class SoftwareEngCourse : public Course{
void reg(Student &s);
}
//Student.h
class Student{
virtual void study(Course &c)=0;
}
class SoftwareEngStudent : public Student{
void study(Course &c);
}
Run Code Online (Sandbox Code Playgroud)
现在在Course.cpp中:
//Course.cpp
void SoftwareEngCourse::reg(Student &s){
vector_of_Student_object.push_back(s);
}
Run Code Online (Sandbox Code Playgroud) 我有两节课:
public class A{
int money;
ArrayList<Item> boughtItems;
.
.
public void addBoughtItem(Item item){
.
.
}
public void adjustMoney(int adjustAmount){
money = money + adjustamount;
}
}
Run Code Online (Sandbox Code Playgroud)
和另一课:
public class B{
ArrayList<Item> itemsForSale;
.
.
public Item sellMeItem(Item item){
.
.
return itemsForSale.get(...);
}
}
Run Code Online (Sandbox Code Playgroud)
现在主要是,我在类B中启动A类实例和B类实例,每当我向它们销售一个项目时,我想更新purchaseItems并实时调整A类实例的资金(意味着,在B类的sellMeItem函数内部.)因此我认为我需要A实例是全局的.如何从B类sellMeItem函数内部到达主要的A对象?(而B类实例也是主要的)
我有这个问题:
float rate= (115/100);
Run Code Online (Sandbox Code Playgroud)
当我做:
System.out.println(rate);
Run Code Online (Sandbox Code Playgroud)
它给了我1.0什么......是问题?
class Point {
public:
Point(int x, int y) : { x = new int(x); y = new int(y) }
...
...
Point& operator=(const Point& other) {
if(this!=&other){
delete x;
delete y;
x = new int(*other.x);
y = new int(*other.y);
}
return *this;
}
private:
const int* x;
const int* y;
}
Run Code Online (Sandbox Code Playgroud)
即使这个x和y已经初始化,这个operator =的实现也会工作吗?删除一个const指针允许我们重新分配它?
我有一个exec文件,我知道其中有一个(或多个)字符串"coolyo"的外观,并且需要复制此文件并将"coolyo"的所有外观替换为我的程序收到的"使用系统调用的参数".我有一个条目和system_call函数写在程序集中.
然而,当我把我的论点写成与"coolyo"(6)相同长度的东西时,它起作用并且一切都很好,它取代了它.如果我输入一个参数来替换长度小于或大于6的"coolyo",则在尝试运行文件时会出现分段错误.
问题是什么?
在途中,还有两个问题:
系统调用sys_read并sys_write根据我收到/发送的字节数更改文件指针?(如果是的话,应该没有问题!但是有!)
当我做sys_read 5个字节,然后重新做sys_read 5个字节,第一次调用后,文件指针在哪里?在5号?还是在1号?意思是,第二个sys_read是从文件[1]还是文件[4]中读取的?
我的代码:
int filePtr=-1;
while(filePtr!=0) {
char buf[6];
filePtr=system_call(SYS_READ,newfile,buf,6);
if(strcmp(buf,"coolyo")==0) {
system_call(SYS_WRITE,fd,argv[1], strlen(argv[1]));
system_call(SYS_LSEEK,fd,strlen(argv[1]) - 5, 1);
}
else
system_call(SYS_WRITE,fd,buf,5);
}
Run Code Online (Sandbox Code Playgroud)