1. 类和对象的基本概念
1.1 类的定义
在C++中,类是一种用户自定义的数据类型,它包含了一组属性(数据成员)和方法(成员函数)。类定义了对象的类型,对象是类的实例。
class MyClass {
public:
int data;
void setData(int value) {
data = value;
}
int getData() {
return data;
}
};
1.2 对象的创建
创建对象的方式如下:
MyClass obj;
1.3 访问控制
C++提供了三种访问控制修饰符:public、protected和private。
- public:成员可以在类的外部被访问。
- protected:成员可以在类及其派生类的内部被访问。
- private:成员只能在类内部被访问。
class MyClass {
private:
int data;
public:
void setData(int value) {
data = value;
}
int getData() {
return data;
}
};
2. 继承
继承是面向对象编程的一个核心概念,它允许一个类继承另一个类的属性和方法。
2.1 基类和派生类
class Base {
public:
void display() {
cout << "Base class display" << endl;
}
};
class Derived : public Base {
public:
void display() {
cout << "Derived class display" << endl;
}
};
2.2 多继承
C++支持多继承,即一个类可以继承多个基类。
class Base1 {
public:
void display1() {
cout << "Base1 class display1" << endl;
}
};
class Base2 {
public:
void display2() {
cout << "Base2 class display2" << endl;
}
};
class Derived : public Base1, public Base2 {
public:
void display() {
display1();
display2();
}
};
3. 多态
多态是指同一操作作用于不同的对象时,可以有不同的解释和执行结果。
3.1 虚函数和纯虚函数
虚函数:在基类中声明的函数,在派生类中可以被重写。
class Base {
public:
virtual void display() {
cout << "Base class display" << endl;
}
};
class Derived : public Base {
public:
void display() override {
cout << "Derived class display" << endl;
}
};
纯虚函数:在基类中声明的虚函数,没有具体的实现。
class Base {
public:
virtual void display() = 0;
};
class Derived : public Base {
public:
void display() override {
cout << "Derived class display" << endl;
}
};
3.2 虚析构函数
当一个类包含指向派生类的指针时,使用虚析构函数可以确保正确的析构顺序。
class Base {
public:
virtual ~Base() {
cout << "Base class destructor" << endl;
}
};
class Derived : public Base {
public:
~Derived() {
cout << "Derived class destructor" << endl;
}
};
4. 封装
封装是将数据和行为封装在一起,隐藏内部实现细节,只暴露必要的接口。
4.1 访问权限
class MyClass {
private:
int data;
public:
void setData(int value) {
data = value;
}
int getData() {
return data;
}
};
4.2 朋友函数
朋友函数可以访问类的私有成员。
class MyClass {
private:
int data;
public:
MyClass() : data(0) {}
friend void printData(const MyClass& obj);
};
void printData(const MyClass& obj) {
cout << "Data: " << obj.data << endl;
}
5. 抽象类
抽象类是指至少包含一个纯虚函数的类。
class AbstractClass {
public:
virtual void display() = 0;
};
class ConcreteClass : public AbstractClass {
public:
void display() override {
cout << "Concrete class display" << endl;
}
};
6. 构造函数和析构函数
6.1 构造函数
构造函数是一种特殊的成员函数,用于初始化对象。
class MyClass {
private:
int data;
public:
MyClass(int value) : data(value) {}
};
6.2 析构函数
析构函数是一种特殊的成员函数,用于释放对象所占用的资源。
class MyClass {
public:
~MyClass() {
// 释放资源
}
};
7. 动态内存分配
动态内存分配允许在运行时分配和释放内存。
int* ptr = new int(10);
delete ptr;
8. 课后习题解答
以下是一些课后习题的解答:
8.1 习题1
// 习题1的代码
8.2 习题2
// 习题2的代码
8.3 习题3
// 习题3的代码
9. 总结
本文对C++面向对象设计中的基本概念、继承、多态、封装、抽象类、构造函数和析构函数、动态内存分配等内容进行了详细解析。希望本文能帮助读者更好地理解和掌握C++面向对象编程。
