C++学习笔记

类和对象的区别

  • C语言中的 struct 只能包含变量,而 C++ 中的 class 除了可以包含变量,还可以包含函数。
  • C:
1.  //定义结构体 Student
2.  struct  Student{
3.  //结构体包含的成员变量
4.  char *name;
5.  int age;
6.  float score;
7.  };
8.  //显示结构体的成员变量
9.  void display(struct  Student stu){
10.  printf("%s的年龄是 %d,成绩是 %f\n", stu.name, stu.age, stu.score);
11.  }
  • Cpp:
12.  //通过class关键字类定义类
13.  class  Student{
14.  public:
15.  //类包含的变量
16.  char *name;
17.  int age;
18.  float score;
19.  //类包含的函数
20.  void say(){
21.  printf("%s的年龄是 %d,成绩是 %f\n", name, age, score);
22.  }
23.  };
  • 通过结构体定义出来的变量还是叫变量,而通过类定义出来的变量有了新的名称,叫做对象(Object)。
  • 我们需要在计算 机内存中的某个地方放置读取的东西。我们将这样一个“地方”称为一 个对象。一个对象是一个具有某种类型的存储区域,类型用来指定可 以放置什么样的信息。一个有名字的对象称为一个变量。例如,字符 串存放在string变量中,整数存放在int变量中。你可以将对象看成一 个“盒子”,可以在其中放置该对象类型的数值。
  • 可以将类比喻成图纸,对象比喻成零件,图纸说明了零件的参数(成员变量)及其承担的任务(成员函数);一张图纸可以生产出多个具有相同性质的零件,不同图纸可以生产不同类型的零件。
  • 类只是一张图纸,起到说明的作用,不占用内存空间;对象才是具体的零件,要有地方来存放,才会占用内存空间。
  • 在 C++ 中,通过类名就可以创建对象,即将图纸生产成零件,这个过程叫做类的实例化,因此也称对象是类的一个实例(Instance)。

单词流

  • C++用户自定义类型通常由两部分构成:公有接口 (用“public:”标识)和具体实现(用“private:”标识)。这样做主要 为了将用户接口(用户方便使用类型所需的)和具体实现(实现类型 所需的)分开。
class Token_stream{
public:
	Token_stream();					//创建一个单词流
	Token get();					//获取一个单词
	void putback(Token t);				//放回一个单词
private:
	//implementation details
};

智能指针

裸指针:可以精准的控制每一块内存,但是存在内存泄漏的可能性
class A;
A *p = new A;
......
/* do something */
......
delete p;
要保证程序不会内存泄漏, 必须保证自new之后一直到delete之间, 代码是异常安全的, 即使异常出现p所持资源也会被释放。然而随着程序的开发,这个过程中可能经过无数人共同开发完成,在这个简单的例子中都很难保证程序未来永远异常安全

零碎知识点

map使用的是红黑树,占用的内存更大,对于有序要求的程序可以使用
unordered_map使用的是hash表,建立时间长,但是对于检索查找更加的快捷
拷贝有等号拷贝和构造拷贝之分

C++ 11: 不可拷贝(noncopyable)类,以及boost::noncopyable介绍

const用法总结:

关于C++ const 的全面总结

对象构造要做到线程安全,唯一的要求是在构造期间不要泄露this指针,即

  • 不要在构造函数中注册任何回调;

posted @ 2023-03-13 15:21  明月棹孤舟  阅读(38)  评论(0)    收藏  举报