一、类、封装
重载:函数名相同,参数的个数或类型或顺序不同、
内联函数:inline,编译时直接将语句替换为代码,省了调用过程。
类是由数据成员和成员函数组成的。
成员函数:构造函数,析构函数,拷贝函数。这三类函数如果没有定义在需要用到时系统会自动定义。
构造函数:1.可以分为无参构造函数和有参构造函数,无参和有参但参数都设定有默认值的称为默认构造函数。
2.初始化列表,stu::stu(int x):m_ix(x);只能用于构造函数,先于构造函数执行,可以初始化const成员。
析构函数:~stu,无参数,对象销毁时自动调用,一般用于释放在构造函数中在堆里申请的内存。
拷贝函数:stu(const stu &s),一般使用复制初始化时系统自动调用,分为深拷贝,浅拷贝。浅拷贝是将地址和值一起拷贝过去,大部分情况下可用,但是如果数据成员是指针/数组时地址也会拷贝过去,这样的话两个实例化的对象的指针会指向同一地址。这时需要用深拷贝,深拷贝申请一个新的内存地址再将数据拷贝过去。
数据成员:可以有变量、数组、指针和另一个对象等。当以对象做成员时,构造函数无参数,对象成员的构造函数先调用,销毁时先调用对象自己的析构函数再调用对象成员的析构函数。
对象指针成员:p->m_ix,(*p).m_ix都可以,sizeof类的大小等于数据成员大小相加。
string类,存储字符串。很多用法···,string s,s.empty(),s.size(),s1 = s2,s1+s2:连成新串,返回新串。,s[n],返回n位置的字符。string s(s1),string s(n,'c')n个c。
错题集:
1.class类型重定义 ,顾名思义就是重复定义了。
比如你定义了一个类 class A 然后你在后面写代码的时候,又定义了一个相同名字的类class A 那么编译的时候就会出现这样
的错误提示。出现这样的问题,有可能是头文件加载加载引起。解决方法,可以通过
在头文件最上方写:
#ifndef XXXXXXX
#define XXXXXXX
文件最后
#endif
另外顺便说一下在代码里面存在的#pragma once 这行代码的意思。
#pragma once 表示使用它的文件仅被编译一次,如果myhead .h 中出现了pragma once ,那么myhead.h仅被编译一次。
2、注意类外定义时加::,调用函数时加(),
3、ctrl+K+C:可以注释掉选中的代码。