【纯干货】C++入门学习总结与分享

在C语言基础上学完C++

学习 C语言和C++语言是一件非常重要的事情,因为这两个语言都是计算机编程界非常重要的语言之一。C语言可以帮助你了解计算机的基本概念和编程原理,并能够快速开发简单的程序。然而,如果你想要学习更高级的编程技能和创造更复杂的程序,那么学习C++就是非常必要的

在学习C++之前,建议先掌握C语言的基本语法和概念,因为C++是在C语言的基础上发展而来的,它与C语言有很多相似之处。学习C++的过程中,你会发现C++比C语言更加强大和灵活,因为它支持面向对象编程(OOP)泛型编程,这些都是非常重要的编程概念。学习C++需要更多的实践和编程练习,因为你需要掌握面向对象编程的概念和技巧,并理解如何使用C++的STL库和其他重要的库进行编程。此外,学习C++需要花费更多的时间和精力,因为它比C语言更加复杂和深奥。

下面是学习c++的重要知识,要学习C++的小伙伴可以看过来啦!



前言

学习C语言和C++语言是非常重要的,这两个语言都可以帮助你成为一名优秀的程序员。学习C语言可以帮助你建立编程的基础,学习C++则可以让你掌握更高级的编程技能和实用的编程工具。
本篇文章帮助要学习C++的小伙伴快速上手操作代码。


一、C++是什么?

C++是一种高级编程语言,是C语言的扩展和继承,具有面向对象编程的特性。C++具有高效、快速、可移植、可靠和灵活的特性,被广泛应用于操作系统、浏览器、游戏引擎、数据库、图形界面、网络和嵌入式系统等多个领域。C++可以用于开发大型软件系统,同时也可以用于编写小型的工具程序或游戏。由于C++具有强大的性能和扩展性,因此它仍然是最受欢迎的编程语言之一。

二、C++和C语言不同之处

C++具有面向对象编程的性质,并且具有一套自己的基本语法结构。

1.面向对象编程

C++是一种面向对象的编程语言,它支持对象、类、继承、多态等面向对象的编程概念,而C语言则不支持。

下面是一个简单的C++继承(代码示例):

// 基类
class Animal {
    
    
public:
  void eat() {
    
    
    cout << "Animal is eating." << endl;
  }
};

// 派生类
class Dog : public Animal {
    
    
public:
  void bark() {
    
    
    cout << "Dog is barking." << endl;
  }
};

int main() {
    
    
  Dog dog;
  dog.eat(); // 调用基类函数
  dog.bark(); // 调用派生类函数
  return 0;
}
 

在上面的代码中,Animal是一个基类,拥有一个成员函数eat()。Dog是Animal的派生类,在Dog中新增了一个成员函数bark()。在Dog的定义中,使用了关键字public来继承Animal的所有成员函数和变量,包括eat()函数。在main函数中,我们创建了一个Dog的对象并调用它的成员函数bark()和从基类Animal继承下来的成员函数eat()。

扫描二维码关注公众号,回复: 17563084 查看本文章

2.基本的语法结构

  1. 变量的声明和赋值(代码示例):

// 声明变量
int x;

// 声明同时赋值
int x = 5;

// 声明多个变量
int x, y, z;

// 赋值
x = 5;
y = x + 3;
z = x * y;
  1. 运算符(代码示例):

// 算术运算符
int x = 5 + 3;      // 加
int y = 5 - 3;      // 减
int z = 5 * 3;      // 乘
int a = 5 / 3;      // 除(整数相除得到整数)
int b = 5 % 3;      // 取模(5除以3余2)

// 比较运算符
bool c = 5 == 3;    // 等于
bool d = 5 != 3;    // 不等于
bool e = 5 > 3;     // 大于
bool f = 5 < 3;     // 小于
bool g = 5 >= 3;    // 大于等于
bool h = 5 <= 3;    // 小于等于

// 逻辑运算符
bool i = true && false;   // 与
bool j = true || false;   // 或
bool k = !true;           // 非
  1. 条件语句(代码示例):

// if语句
if (x > 5) {
    
    
    cout << "x is greater than 5";
} else if (x == 5) {
    
    
    cout << "x is equal to 5";
} else {
    
    
    cout << "x is less than 5";
}

// switch语句
switch (x) {
    
    
    case 1:
        cout << "x is 1";
        break;
    case 2:
        cout << "x is 2";
        break;
    default:
        cout << "x is not 1 or 2";
        break;
}
  1. 循环语句(代码示例):

// for循环
for (int i = 0; i < 10; i++) {
    
    
    cout << i << endl;
}

// while循环
int i = 0;
while (i < 10) {
    
    
    cout << i << endl;
    i++;
}

// do-while循环
int i = 0;
do {
    
    
    cout << i << endl;
    i++;
} while (i < 10);

三、C++重点知识掌握

1.C++的核心概念——类和对象

类是一种数据类型,可以用来描述具有共同属性和行为的对象集合。类定义了对象的属性和行为,并且可以通过实例化对象来访问这些属性和行为。

对象是类的实例,它包含了类定义的属性和行为的具体值。对象使用点运算符(.)访问它的成员变量和成员函数。

在C++中,类和对象是面向对象编程的基础。定义类的语法如下:

class ClassName {
    
    
  // 类的成员变量和成员函数声明
  private:
    // 私有成员
  public:
    // 公有成员
};
 

其中,private和public关键字用于控制类的访问权限。私有成员只能在类内部访问,公有成员可以在类内外都访问。


类的成员函数可以在类的内部或外部定义,语法如下:

return_type ClassName::functionName(parameters) {
    
    
  // 函数体
}
 

其中,ClassName是类名,functionName是成员函数名,parameters是参数列表,return_type是函数的返回类型。在类的外部定义成员函数时,需要使用作用域运算符(::)来指明函数所属的类。


在使用类创建对象时,需要使用new运算符来动态分配内存空间,并且使用析构函数来释放内存空间。例如:

ClassName* obj = new ClassName(); // 创建对象
obj->functionName(); // 调用成员函数
delete obj; // 销毁对象
 

2.访问控制

在 C++ 中,访问控制是通过访问修饰符(access modifiers)来实现的。C++ 提供了三种访问修饰符:public、private 和 protected。这些修饰符定义了类中成员的可访问性。

1)public:公有的成员可以被类内部和外部的任何代码访问。在类外部可以使用对象名.成员名的方式来访问公有成员。

2) private:私有的成员只能被类内部的代码访问,外部的代码不能访问私有成员。私有成员只能在类内部使用类的成员函数来访问。
3)protected:保护的成员仅可以被其本身及其子类访问,类的外部不能访问。

下面是一个使用访问修饰符的示例:

class MyClass {
    
    
public:
    int public_member;
protected:
    int protected_member;
private:
    int private_member;
};

int main() {
    
    
    MyClass obj;
    obj.public_member = 1;     // 可以访问公有成员
    obj.protected_member = 2;  // 不能访问保护成员
    obj.private_member = 3;    // 不能访问私有成员
    return 0;
}

3.函数的重载

C++可以定义多个同名函数,但参数列表不同。在调用函数时,编译器会根据实际参数的类型和数量选择合适的函数进行调用。

以下是C++函数重载的示例代码:

#include <iostream>
using namespace std;

// 重载函数 add
int add(int x, int y) {
    
    
    return x + y;
}

// 重载函数 add
double add(double x, double y) {
    
    
    return x + y;
}

// 重载函数 add
int add(int x, int y, int z) {
    
    
    return x + y + z;
}

int main() {
    
    
    // 使用不同的参数调用重载函数 add
    int a = add(1, 2);
    double b = add(1.5, 2.5);
    int c = add(1, 2, 3);

    // 输出计算结果
    cout << "a = " << a << endl;
    cout << "b = " << b << endl;
    cout << "c = " << c << endl;

    return 0;
}

输出结果如下:

a = 3
b = 4
c = 6

可以看到,我们定义了三个重载函数
add,并分别传入不同类型和数量的参数进行调用,根据参数类型和数量的不同,编译器会自动选择调用对应的重载函数来完成计算。


4.运算符的重载

C++可以重新定义运算符的含义。通过重载运算符,可以使得对象使用起来更像内置的数据类型。
以下是一个简单的示例,展示了如何重载C++运算符:

#include <iostream>

class Vector {
    
    
public:
    int x, y;

    Vector() {
    
    }
    Vector(int x, int y) : x(x), y(y) {
    
    }

    // 重载加号运算符
    Vector operator+(const Vector& other) const {
    
    
        return Vector(x + other.x, y + other.y);
    }

    // 重载等于运算符
    bool operator==(const Vector& other) const {
    
    
        return x == other.x && y == other.y;
    }

    // 重载小于运算符
    bool operator<(const Vector& other) const {
    
    
        return x < other.x || (x == other.x && y < other.y);
    }

    // 重载流插入运算符
    friend std::ostream& operator<<(std::ostream& os, const Vector& v) {
    
    
        os << "(" << v.x << ", " << v.y << ")";
        return os;
    }
};

int main() {
    
    
    Vector v1(1, 2);
    Vector v2(3, 4);
    Vector v3 = v1 + v2; // 调用重载的加号运算符
    std::cout << v3 << std::endl; // 调用重载的流插入运算符
    std::cout << (v1 == v2) << std::endl; // 调用重载的等于运算符
    std::cout << (v1 < v2) << std::endl; // 调用重载的小于运算符
    return 0;
}

在上面的示例中,我们定义了一个Vector类,并重载了加号运算符、等于运算符、小于运算符和流插入运算符。我们还在operator<<函数中使用了friend关键字,以便访问Vector对象的私有成员变量。

main函数中,我们创建了两个Vector对象,并使用重载的加号运算符将它们相加,将结果赋给了第三个Vector对象。然后我们使用重载的流插入运算符将第三个Vector对象输出到标准输出流。我们还使用了重载的等于运算符和小于运算符,分别比较了两个Vector对象的相等性和大小关系,并将结果输出到标准输出流。


5.支持继承

继承是C++中的另一个重要特性,它允许创建新类,该类继承了现有类的属性和行为。通过继承,可以实现代码的复用和扩展。
下面是一个简单的C++继承示例代码:

#include <iostream>
using namespace std;

class Animal {
    
    
   public:
      void eat() {
    
    
         cout << "Animal is eating" << endl;
      }
};

class Dog : public Animal {
    
    
   public:
      void bark() {
    
    
         cout << "Dog is barking" << endl;
      }
};

int main() {
    
    
   Dog myDog;
   myDog.eat();
   myDog.bark();
   return 0;
}

在上面的代码中,一个基类Animal定义了一个eat()函数,而一个派生类Dog继承了该函数,并添加了一个bark()函数。在main()函数中,我们创建了一个Dog对象,并调用其继承来的eat()函数和bark()函数。

输出结果为:


Animal is eating
Dog is barking

6.异常处理

异常处理是C++中处理程序错误的一种机制。当发生异常时,可以抛出异常,并通过try-catch语句来捕获和处理异常。
下面是一个简单的C++异常处理示例:

#include <iostream>
#include <stdexcept>

int main() {
    
    
    int a, b;

    std::cout << "Enter two integers: ";
    std::cin >> a >> b;

    try {
    
    
        if (b == 0) {
    
    
            throw std::runtime_error("Division by zero error");
        }
        std::cout << a << " / " << b << " = " << a/b << std::endl;
    }
    catch(std::exception& e) {
    
    
        std::cerr << "Error: " << e.what() << std::endl;
    }

    return 0;
}

在上面的代码中,我们通过使用try-catch语句块来处理除以零错误。如果用户输入了0作为除数,则会抛出std::runtime_error异常,然后程序会在catch块中捕获该异常并输出错误信息。如果除数不为零,则计算a/b并输出结果。

请注意,在使用C++异常处理时,我们应该坚持以下几个最佳实践:

1.只在出现错误时抛出异常,而不是在所有情况下都抛出异常。

2.使用try-catch语句块捕获异常,并在程序中处理它们。

3.尽量在异常处理程序中提供有用的错误信息,以帮助调试程序。

4.避免在构造函数中抛出异常,因为这可能导致对象状态不一致的情况。

5.如果我们使用第三方库,应该查看他们的异常处理方案,以确保您的代码与他们的代码相容。


7.动态内存分配

在写C++程序时,要注意内存管理,特别是动态内存分配。使用new运算符分配内存后,需要使用delete运算符释放内存,以避免内存泄漏。
以下是C++中的动态内存分配代码:


// 分配一个整型变量的内存
int* p_int = new int;

// 分配一个长度为10的整型数组的内存
int* p_int_array = new int[10];

// 分配一个长度为5的字符串的内存
char* p_char_array = new char[5];

// 释放内存
delete p_int;
delete[] p_int_array;
delete[] p_char_array;

需要注意的是,在分配内存时,可以使用new关键字,释放内存时,需要使用delete关键字。如果分配的是数组类型的内存,需要在delete关键字后面加上方括号[]


8.标准库

C++还提供了一些C++标准库,如输入输出流库、字符串库、容器库和算法库等。这些库提供了丰富的功能和工具,可以大大简化编程任务,并提供了许多常用的功能。以下是C++标准库的主要功能说明:

在这里插入图片描述

四、总结

对于学习C++,初学者可以从以下四个步骤来学习:

1.基础语法学习

学习C++的基础语法,包括数据类型、运算符、流控制语句、函数、指针、数组、结构体、类等,掌握基础语法是C++学习的前提。

2.面向对象编程

掌握C++的面向对象编程思想,学习类、对象、继承、多态、虚函数等内容,理解C++的类库,并能够使用STL等标准库。

3.算法和数据结构

C++是一门强调数据结构和算法的语言,学习常用的数据结构和算法,包括栈、队列、链表、二叉树、图、排序算法、查找算法等。

4.实践

通过编写大量的代码,掌握C++的应用,并能够独立完成C++程序的开发,如操作系统、网络通信、游戏开发等。

总之,要学好C++,需要勤于实践,不断积累经验,多做项目,多看源码,才能不断提高自己的编程水平。

以上就是我学习完C++之后的一些学习分享,希望可以给到大家一些帮助!