在C++中,抽象类是一种特殊的类,它不能被实例化,只能作为基类来派生其他类。抽象类通常包含至少一个纯虚函数,纯虚函数是在基类中声明但不提供具体实现的虚函数,它的声明形式为 virtual void function() = 0;
。
virtual void function() = 0;
。以下是一个简单的C++抽象类及其派生类的例子:
// 抽象类 Shape
class Shape {
public:
virtual double area() const = 0; // 纯虚函数
virtual void draw() const = 0; // 纯虚函数
virtual ~Shape() {} // 虚析构函数
};
// 派生类 Circle
class Circle : public Shape {
private:
double radius;
public:
Circle(double r) : radius(r) {}
double area() const override {
return 3.14159 * radius * radius;
}
void draw() const override {
std::cout << "Drawing a circle." << std::endl;
}
};
// 派生类 Square
class Square : public Shape {
private:
double side;
public:
Square(double s) : side(s) {}
double area() const override {
return side * side;
}
void draw() const override {
std::cout << "Drawing a square." << std::endl;
}
};
int main() {
Shape* shapes[2];
shapes[0] = new Circle(5);
shapes[1] = new Square(4);
for (int i = 0; i < 2; ++i) {
shapes[i]->draw();
std::cout << "Area: " << shapes[i]->area() << std::endl;
delete shapes[i];
}
return 0;
}
在C++中,单独编译是指将程序的不同部分分别编译成目标文件,然后链接成一个可执行文件。这可以通过以下步骤实现:
.cpp
文件中。.h
头文件,包含类的声明。.cpp
文件生成目标文件(.o
或 .obj
)。例如,对于上面的例子,可以有以下文件结构:
shape.h
circle.h
square.h
shape.cpp
circle.cpp
square.cpp
main.cpp
编译命令可能如下:
g++ -c shape.cpp -o shape.o
g++ -c circle.cpp -o circle.o
g++ -c square.cpp -o square.o
g++ -c main.cpp -o main.o
g++ shape.o circle.o square.o main.o -o my_program
如果在单独编译过程中遇到链接错误,如未定义的引用,通常是因为:
通过检查和修正这些问题,可以解决大多数单独编译时遇到的问题。
领取专属 10元无门槛券
手把手带您无忧上云