1.二维数组的传参问题:
(1):在形参中指明第二维维数; 例:void set(int a[][3])
(2):一维数组指针作为形参; 例:void set(int (*a)[3])
(3):二重指针传参; 例:set (&a);void set(int (*a)[10][10])
2.指针引用:
*p=10;
*&q=p;
3.const
(1).const int a==int const a;
(2).int a=3; int const *b=&a;(*b只有read权限,可以改变指向,但不能改变值)
(3).int a=3; int *const b=&a;(*b只有写的权限,可以改变值,但不能改变指向)
4.inline
inline max(int a,int b,int c);内联函数
优点:效率高
缺点:复杂嵌套函数五福使用,如递归;
注意:类内定义函数会优先使用内联函数
5.int *p=new int (10),10是赋值。
6.内存分区:
(1)栈区,系统分配
(2)堆区:程序员申请分配
(3)全局区:存储全局变量及静态变量
(4)常量区:
(5)代码区:存储逻辑代码的二进制。
7.初始化列表的必要性
8.this指针的作用:
(1).可以区分同名的形参与私有成员。
(2).可以作为成员函数的返回值,指向一个类,该函数的类型须为类名加引用,返回类型为return *this;亦或者类型为类名加*号,而返回值为this亦可。
8. 如果类存在继承关系,派生类必须在其初始化列表中调用基类的构造函数
#include <iostream>
using namespace std;
class Base
{
public:
Base(int a) : val(a) {}
private:
int val;
};
class A : public Base
{
public:
A(int v) : p(v), Base(v) {}
void print_val() { cout << "hello:" << p << endl;}
private:
int p;
};
int main(int argc ,char **argv)
{
int pp = 45;
A b(pp);
b.print_val();
}
9.在进行多继承时,父类析构函数应该用虚函数。
10.虚继承的优势:父类被多继承时不必每次都执行构造函数,因此只有一个父类,里面数据不会被改变。
11.继承的isA特性,自子类可以通过solider.person::play()这样的形式来访问父类成员。
12.参数传递时,形参为指针或者引用更快。
13. 静态数据成员单独初始化
14.因为在用父类指针指向子类对象,销毁时,销毁父类指针,而子类指针不会被销毁,造成内存泄漏,所以得用到虚析构函数。
15.静态多态:在使用之前已经编译好,如重构。
动态多态:在使用时才进行编译的函数,如虚函数。
16.隐藏:父类和子类成员函数名称相同
覆盖:子类中定义自己的虚函数,覆盖了虚函数表里父类虚函数的地址。
17.含有纯虚函数的类为抽象类,抽象类不能被实例化,如果继承它的子类对纯虚函数不做实现,也不能实例化。
18.RTTI的格式及强制转换
19.友元函数运算符重载形参必须是类名,成员函数重载则不需加形参。
20.后置++与前置++不同:(1)声明时不用引用。(2)须有形参int与前置++区别。
21.[]运算符只能用友元函数重载,<<运算符只能用成员函数重载。
22.
类型标识符& 函数名()
用此形式时,相当于返回了一个变量,因为返回时返回的指针是指向变量的,因此,可以对它进行赋值操作,并且此处返回的变量,一般是全局变量或者静态变量,因此在函数返回时不会产生被返回值的副本。
#include<iostream>
using namespace std;
int num=0;
int& func()
{
return ++num; //此处num为全局变量
}
int main()
{
int i;
for(i=0;i<5;i++)
cout<<func()<<'\t';
cout<<endl;
func()=10;//对函数进行赋值,即将10赋给num
for(i=0;i<5;i++)
cout<<func()<<'\t';
cout<<endl;
}
猜猜结果是多少呢
23.当构造函数参数有默认值时,则视为默认构造函数。
24:,调用复制构造函数的三种情况
(1):用一个对象初始化另一个对象:如 A a;A b=a;
(2)调用的函数参数用到了类对象。
(3)函数返回类型为类对象。
25.
2. 重载函数作为友元函数:
运算符左侧作为 C++ 标准类型或者是非 Complex 型的对象;
此时运算符重载函数不能作为成员函数,只能作为非成员函数;
并且如果此时函数需要访问类的私有成员,则必须声明为该类的友元函数!!!
例如 实例+3这样可以,3+实例这样则不行。
26
27.
28.堆中实例化对象时,后面加括号会自动初始化为0,是一个好习惯。如:student stu=new student();