当前位置:实例文章 » JAVA Web实例» [文章]C++基础知识点整理笔记(四)

C++基础知识点整理笔记(四)

发布人:shili8 发布时间:2025-03-12 00:22 阅读次数:0

**C++基础知识点整理笔记(四)**

**1. 类和对象**

在 C++ 中,类是用来描述一个事物的特征和行为的模板。对象则是根据这个类创建出来的实体。

###1.1 类定义

cppclass Person {
public:
 string name;
 int age;

 void sayHello() {
 cout << "Hello, my name is " << name << " and I'm " << age << " years old." << endl;
 }
};


在这个例子中,我们定义了一个名为 `Person` 的类,它有两个成员变量 `name` 和 `age`,以及一个成员函数 `sayHello()`。

###1.2 对象创建
cppint main() {
 Person person1;
 person1.name = "John";
 person1.age =30;

 person1.sayHello();

 return0;
}


在这个例子中,我们创建了一个 `Person` 类的对象 `person1`,并为其成员变量赋值,然后调用 `sayHello()` 函数。

###1.3 构造函数构造函数是用来初始化类成员变量的特殊函数。它的名字与类名相同,并且没有返回类型。

cppclass Person {
public:
 string name;
 int age;

 Person(string n, int a) {
 name = n;
 age = a;
 }

 void sayHello() {
 cout << "Hello, my name is " << name << " and I'm " << age << " years old." << endl;
 }
};


在这个例子中,我们定义了一个构造函数 `Person(string n, int a)`,它接受两个参数 `n` 和 `a`,并为类成员变量赋值。

###1.4 析构函数析构函数是用来释放类资源的特殊函数。它的名字与类名相同,但前面加上一个波浪线 (~)。

cppclass Person {
public:
 string name;
 int age;

 Person(string n, int a) {
 name = n;
 age = a;
 }

 ~Person() {
 cout << "Person object destroyed." << endl;
 }

 void sayHello() {
 cout << "Hello, my name is " << name << " and I'm " << age << " years old." << endl;
 }
};


在这个例子中,我们定义了一个析构函数 `~Person()`,它输出一条消息指示类对象被销毁。

**2. 继承**

继承是用来创建新类的机制。新类可以继承原来的类的成员变量和成员函数,并且可以添加新的成员变量和成员函数。

###2.1 公共继承
cppclass Animal {
public:
 string name;
 int age;

 void eat() {
 cout << "Eating..." << endl;
 }
};

class Dog : public Animal {
public:
 void bark() {
 cout << "Woof woof!" << endl;
 }
};


在这个例子中,我们定义了一个 `Animal` 类,然后继承它来创建一个 `Dog` 类。 `Dog` 类可以访问 `Animal` 类的成员变量和成员函数,并且可以添加新的成员函数 `bark()`。

###2.2 私有继承
cppclass Animal {
public:
 string name;
 int age;

 void eat() {
 cout << "Eating..." << endl;
 }
};

class Dog : private Animal {
public:
 void bark() {
 cout << "Woof woof!" << endl;
 }
};


在这个例子中,我们定义了一个 `Animal` 类,然后继承它来创建一个 `Dog` 类。 `Dog` 类可以访问 `Animal` 类的成员变量和成员函数,但这些成员变量和成员函数是私有的。

###2.3 多重继承
cppclass Animal {
public:
 string name;
 int age;

 void eat() {
 cout << "Eating..." << endl;
 }
};

class Dog : public Animal, public Mammal {
public:
 void bark() {
 cout << "Woof woof!" << endl;
 }
};


在这个例子中,我们定义了一个 `Animal` 类,然后继承它来创建一个 `Dog` 类。 `Dog` 类可以访问 `Animal` 类的成员变量和成员函数,并且可以继承另一个类 `Mammal` 的成员变量和成员函数。

**3. 模板**

模板是用来定义泛型函数或类的机制。它允许函数或类在编译时根据参数类型进行实例化。

###3.1 函数模板
cpptemplate <typename T>
T max(T a, T b) {
 return (a > b) ? a : b;
}


在这个例子中,我们定义了一个函数模板 `max()`,它接受两个参数 `a` 和 `b`,并返回较大的值。该函数可以根据类型进行实例化。

###3.2 类模板
cpptemplate <typename T>
class Stack {
public:
 void push(T value) {
 // ...
 }

 T pop() {
 // ...
 }
};


在这个例子中,我们定义了一个类模板 `Stack`,它接受一个类型参数 `T`。该类可以根据类型进行实例化。

**4. 异常**

异常是用来表示程序运行时出现的错误或异常情况的机制。异常可以通过抛出和捕获来处理。

###4.1 抛出异常
cppvoid divide(int a, int b) {
 if (b ==0) {
 throw runtime_error("Division by zero!");
 }
 cout << a / b << endl;
}


在这个例子中,我们定义了一个函数 `divide()`,它抛出一个异常当除数为零时。

###4.2 捕获异常
cppvoid divide(int a, int b) {
 try {
 if (b ==0) {
 throw runtime_error("Division by zero!");
 }
 cout << a / b << endl;
 } catch (const exception& e) {
 cerr << "Error: " << e.what() << endl;
 }
}


在这个例子中,我们定义了一个函数 `divide()`,它捕获异常并输出错误信息。

**5. 智能指针**

智能指针是用来管理动态内存的机制。它可以自动释放内存以避免内存泄漏。

###5.1 unique_ptr
cppunique_ptr<int> ptr(new int(10));
cout << *ptr << endl;


在这个例子中,我们定义了一个 `unique_ptr`,它指向一个动态分配的整数。该智能指针可以自动释放内存。

###5.2 shared_ptr
cppshared_ptr<int> ptr(new int(10));
cout << *ptr << endl;


在这个例子中,我们定义了一个 `shared_ptr`,它指向一个动态分配的整数。该智能指针可以自动释放内存。

**6. lambda表达式**

lambda表达式是用来定义匿名函数的机制。它允许函数在使用时定义。

###6.1 简单lambda
cppauto add = [](int a, int b) { return a + b; };
cout << add(10,20) << endl;


在这个例子中,我们定义了一个简单的lambda表达式 `add()`,它接受两个参数并返回它们的和。

###6.2 复杂lambda
cppauto add = [](int a, int b) {
 cout << "Adding..." << endl;
 return a + b;
};
cout << add(10,20) << endl;


在这个例子中,我们定义了一个复杂的lambda表达式 `add()`,它接受两个参数并返回它们的和。该函数还输出一条消息。

**7. fold表达式**

fold表达式是用来简化循环或递归操作的机制。它允许将多个元素合并为一个值。

###7.1 简单fold
cppint sum =0;
for (auto i : {10,20,30}) {
 sum += i;
}
cout << sum << endl;


在这个例子中,我们定义了一个简单的fold表达式,使用范围-for循环将三个元素合并为一个值。

###7.2 复杂fold
cppint sum =0;
for (auto i : {10,20,30}) {
 if (i >15) {
 sum += i *2;
 } else {
 sum += i;
 }

其他信息

其他资源

Top