小编The*_*tMe的帖子

在指向非堆对象的指针上调用delete

令我困惑的问题:

C c1;
C *p = &c1;
delete p;
Run Code Online (Sandbox Code Playgroud)

什么可能是输出?

c++ memory

2
推荐指数
1
解决办法
498
查看次数

无法分配抽象类型解决方案的对象?

我有一个用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)

c++ oop

1
推荐指数
1
解决办法
8063
查看次数

Java中的全局对象?

我有两节课:

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类实例也是主要的)

java

0
推荐指数
1
解决办法
2832
查看次数

Java float无法正常运行

可能重复:
为什么(360/24)/ 60 = 0 ...在Java中

我有这个问题:

float rate= (115/100);
Run Code Online (Sandbox Code Playgroud)

当我做:

System.out.println(rate);
Run Code Online (Sandbox Code Playgroud)

它给了我1.0什么......是问题?

java

0
推荐指数
1
解决办法
1582
查看次数

const指针成员和operator =

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指针允许我们重新分配它?

c++

0
推荐指数
1
解决办法
2127
查看次数

系统调用lseek导致分段错误

我有一个exec文件,我知道其中有一个(或多个)字符串"coolyo"的外观,并且需要复制此文件并将"coolyo"的所有外观替换为我的程序收到的"使用系统调用的参数".我有一个条目和system_call函数写在程序集中.

然而,当我把我的论点写成与"coolyo"(6)相同长度的东西时,它起作用并且一切都很好,它取代了它.如果我输入一个参数来替换长度小于或大于6的"coolyo",则在尝试运行文件时会出现分段错误.

问题是什么?

在途中,还有两个问题:

  1. 系统调用sys_readsys_write根据我收到/发送的字节数更改文件指针?(如果是的话,应该没有问题!但是有!)

  2. 当我做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)

c

-1
推荐指数
1
解决办法
381
查看次数

标签 统计

c++ ×3

java ×2

c ×1

memory ×1

oop ×1