c++入门知识

介绍

C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。

C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。

C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。

C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。

说明

这只是我自己不知道的一些c++的理念和知识。并不是完整的一套教学。

.和->的区别

.是类或者是结构体访问成员变量的时候用的,但是我们如果是一个指向结构体实例或者是类实例的指针,那么我们就需要(*p).xxx才能访问,非常麻烦,如果是提供一个直接访问的方法,不是就很方便了,所以->就是解决这个问题的。

this指针问题

this指针是实例对象的一个成员属性,其实它是指向自己的。所以同一个类的不同实例对象this保存的是不同的。sizeof函数是取对象的字节数大小,但是指针是不会影响它的大小的。
this指针的作用域是类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数,都知道成员函数是没有保存在成员对象实例里的,但是我们在成员函数里面却可以直接调用非静态成员,这是因为编译器会自动加上this->成员变量,这样就知道了成员变量的位置了。this总是指向这个对象,所以是一个常量指针。

局部变量离开作用域问题

局部变量存储在栈里面,但是局部变量在离开作用域后,会被自动回收,但是只是回收了这个变量的指针而已,在栈里面的内容是不会被清除的,如果我们以非法的形式去访问栈里的内容,其实还是可以访问到的。

析构函数顺序问题

对于对象的建立,构造函数我们知道是按照调用顺序执行的。但是析构函数呢,通过写例子得到的实际情况是,析构函数跟构造函数顺序完全相反。
原理是因为对象的存储区域是栈,栈的特点就是先进后出,所以构造函数先调用,而析构函数却是后进的先调用。

拷贝构造函数

类也是可以直接用=号进行赋值的,其实就是将实例对象的成员属性一一复制给要赋值的类的对应成员属性,但是如果类里面的成员属性有类的类型呢,里面保存着类的地址,那么复制的那个也是保存的同一个地址,赋值是没有问题的,但是一旦开始两个都要回收的时候,第一个回收没问题,但是却把内部类属性的内存释放了,第二个回收的时候,由于已经释放了再次释放就会报错。拷贝构造函数就可以解决这个问题。
拷贝构造函数就是构造函数,只是参数是本类的引用,不写拷贝构造函数,编译器也会自动生成一个默认的。通过显示定义拷贝构造函数可以解决上面问题。

1
2
3
4
5
6
7
8
9
10
11
computer(computer &xx) //自定义复制构造函数

{

  //重新为brand开辟和cp.brand同等大小的动态内存

  xxx = new char[strlen(xx.xxx) + 1]; //加+是为了保存结束字符

  strcpy(xxx, xx.xxx); //字符串复制 price = xx.price;

}

全局变量数组

在c++中创建全局变量的数组时,维度的大小必须是常亮才能创建成功,否则会报错