c++小记

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();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值