-
只要在声明或函数体前面中的一个地方加上inline就可以成为内联函数。 内联函数的声明和定义必须在同一个文件中。推荐都加inline,这样更清晰
-
inline 只是建议c++编译器将函数设为内联函数,但没有决定权。当函数里有循环语句,复杂的条件语句,递归等,则c++编译器无视inline关键字
-
#include<> 和 #include" " 只是搜索顺序不一样,前者先搜索系统中的头文件,后者先搜索本地程序的头文件。
-
函数重载 函数名一样,函数的形参列表不一样 ,与函数的返回值无关 编译举例:Swap_int*_int*; Swap_int&_int&; 所以不会造成函数编译冲突,与c语言不同。
-
函数的默认参数顺序,必须从右往左添加
-
数组不能引用,如果参数大于7个,建议使用结构体引用地址。
-
tyoedef struct xx {}yy; yy person;
srtuct xx {}; struct xx person; -
在类外,类的对象只能访问该类的public区域的成员(成员变量和成员函数)
-
1.构造函数没有返回值 2. 构造函数名字与类名一样 3.构造函数可以有参数 4.构造函数可以重载,可以有多个
-
1、public:public表明该数据成员bai、成员函du数是对所有用户开放的,所有用户都可以zhi直接进行调用
2、private:private表示私有dao,私有的意思就是除了class自己之外,任何人都不可以直接使用。
3、protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。 -
biology t_biology1;
biology t_biology2(“tree”,2000,300); //自动调用有参的构造函数biology::biology(const string &t_nam, int t_height , int t_weight)
:m_name(t_name),m_height(t_height),m_weight(t_weight) //类成员初始化 -
引用必须初始化。
-
类的组合,先调用类成员变量的构造函数,再调用自己的构造函数
-
1.类的析构函数没有返回值。2.函数名为~food()。 3.析构函数没有参数。4.自定义析构函数只能有一个,不能重载。5.不管是否定义一个析构函数,c++编译器都会生成一个默认的析构函数。6.析构函数的调用顺序与构造函数调用的顺序相反。
-
explicit 抑制一个参数构造函数的隐式转换。
情况一
explicit Car(int t_age);
Car t_car1 =20; //此句编译不通过
情况二
getCarInfo(const Car t_car);
getCarInfo(“xuefulan”); //发生了隐式转换 -
//类的const成员函数。只能访问该类的成员变量,不能修改该类的成员变量。
//类的const成员函数,不能调用该类的非const成员函数
//在类外,const类对象和const类对象的引用只能调用该类的const成员函数(public区),不能调用该类的非const成员函数
string getID() const
{
} -
在函数里的类叫局部类。//不是很推荐这样使用
void func1()
{
class Car:
{
//局部类,必须是内联函数。
void print()
{
cout << " "<< endl;
}
}
} -
类声明
class student;
class stdent
{
} -
友元
1- class student
{
//把一个普通函数设置为student的友元函数
friend void getStore(const student &t_student);
}
2- class student
{
//把一个类的某个成员函数设置为student的友元函数
friend void Teacher::getStore(const student &t_student);
}
3- class student
{
//把一个类设置为student的友元类
friend class count;
}
友元函数不是该类的成员函数 -
友元函数一般用作操作符重载。
ostream& operator << (ostream &os,const student &t_student); //ostream &os 示例中实际就是cout
cout << student1; -
静态成员变量初始化地方,在对应的cpp中进行初始化 int student::m_number= 0;
静态成员变量定义&静态成员函数的定义
class student
{
static int m_number;
static int getNumber()
{
m_name;//不能直接调用类的非静态成员(非静态成员变量和非静态成员函数)
print();//
getCount();//能直接调用类的静态成员(静态成员变量和静态成员函数)
}
static int getCount();
}
调用类的静态成员的方法
student.m_number;
student::getNumber();
- 类的静态成员变量属于整个类,不属于类的任何一个对象,但同时又被该类的所有对象共享,静态成员函数没有this指针
- 局部类不能有静态成员变量,但可以有该类的静态成员函数
void func
{
class student:
{
static ing m_number;//错误
static int getScore();//可以有
}
} - 共有继承下,
可以将一个子类的对象赋值给父类的对象。
可以用一个子类的对象去初始化一个父类的引用。
可以用一个父类的指针指向一个子类的对象。
赋值兼容规则的作用:用于函数传参
- 只要有一个虚函数,该类就有且只有一张虚函数标
- vector::iterator t_iter1; //随机迭代器
vector::const_iterator t_iter2; //const迭代器,只能读数据
vector::reverse_iterator t_iter3; //反向迭代器