cpp复习

腾讯的不定项选择真的很忧伤,我都没法确定笔试能不能过了。

好的,下面我们来复习cpp,大概花一周时间,主要包括sizeof、多态、引用、指针、内联等

1 求1+2+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字以及条件判断语句(A?B:C)
这个题目很无语,知道答案之后就更无语了,最无语的是,我居然还想到了,


使用一个static变量,然后创建一个n的数组,static就会累加



2 赋值操作符重载


CMyString& CMyString::operator =(const CMyString &str)
{
    if(this == &str)
        return *this;

    delete []m_pData;
    m_pData = NULL;

    m_pData = new char[strlen(str.m_pData) + 1];
    strcpy(m_pData, str.m_pData);

    return *this;
}


3 cpp设计不能被继承的类:

4 const和static不能同时修饰一个函数:

C++编译器在实现const的成员函数的时候为了确保该函数不能修改类的实例的状态,会在函数中添加一个隐式的参数<类名> *const this


5 static用法

•用于 函数体中:定义语句只会执行一次,但是变量值可以一直持续到程序结束
•用于全局变量:可见性仅限于当前文件
•用于类定义中(静态成员):class_name::x;
不能在类内部对静态成员进行初始化 (C++标准规定,static整型和布尔型可以在声明时初始化)

6 const

•const修饰变量(常量)
–const int* constant1:a variable pointer to a constant integer 指向的值是常量
–int const*constant1:the same as the above
–int* const constant2:a constant pointer to a variable integer  指针是常量
–int  constconst constant3:a constant pointer to a constant integer
const修饰函数返回值
•const修饰成员函数
–在const成员函数定义的地方,通知编译程序该成员函数不会修改对象数据成员的值
–在调用const成员函数时,通知编译程序该成员函数不会改变对象数据成员的值

7 关于sizeof,32位机器和64位机器

sizeof(int)=4、4

sizeof(char)=1、1

char[10] sc = "abc";

char[]sn = "1vd54"

sizeof(sc) = 10;

sizeof(sn)=6;


sizeof(int*)=4、8

sizeof(char*)=4、8

char *p ="123456";

sizeof(p)=4;


sizeof(long)=8、8

sizeof(long long)=8、8


class  A{};//1

class B{//1

public:

    B(){}

    ~B(){}

    

};


class C{//4 虚函数指针

public:

    C(){}

    virtual ~C(){}

};


8 初始化顺序

class A{

int n1;

int n2;

A():n2(0),n1(n2+2){

}

};

Visual Studio 2010:

输出n1是一个随机的数字20nC++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。因此在这道题中,会首先初始化n1,而用于初始化n1的参数n2还没有初始化,是一个随机值,因此n1就是一个随机值。初始化n2时,根据参数0对其初始化,故n2=0


9 拷贝构造函数,必须使用引用作为参数


10 函数返回局部数组

char * get1(){

    char p[] = "fd";这里的数组被回收

    return p;

}


char * get2(){

    char * p = "fd";

    return p;

}


11 关于虚析构

如果父类的指针,指向子类的对象

此时必须将父类的析构函数设为虚析构,否则delete父类指针时,只会调用父类的析构器,而不会调用子类的析构


12 STL容器vector,queue,map,

map是排好序的


13 满二叉树的节点一共699个,则叶子数?

n0 = n2+1;

n = n0+n1+n2 = 699

其中n1 = 0或者n1 = 1,显然这个n1=0

所以,n2 =  349,n0=350


14 内联函数

在所有类说明中,内部定义的成员函数都是内联函数

内联函数不能为虚函数,因为内联是静态的概念


15 散列函数

直接定址法、数字分析法、乘余取整法、平方取中法


16 引用

不能返回局部变量的引用

不能返回函数内部new分配的引用,会造成memory leak

17 联合

•结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
•对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的。

union

{

  int i;

  char x[2];

}a;

a.x[0]=10;

a.x[1]=1;

printf("%d",a.i);  266


18 实现strcpy

#include<cassert>

char* strcpy(char* strDest,constchar* strSrc)

{

    assert(strDest && strSrc);    // 2分

    char* cp = strDest;            // 2分

    while (*cp++ =*strSrc++)    // 2分

        ;

    return strDest;                // 2分

}


19 new和malloc

•new delete与malloc free的联系与区别?
–都是在堆(heap)上进行动态的内存操作。
–用malloc函数需要指定内存分配的字节数并且不能初始化对象,返回void*
–new 会自动调用对象的构造函数,返回指定类型指针,而且可以重载。
–delete会调用对象的destructor,而free 不会调用对象的destructor

20 初始化

•有哪几种情况只能用intializationlist 而不能用assignment?
–当类中含有const、reference成员变量;
–基类的构造函数都需要初始化表?
成员对象
•建议:能在初始化列表初始化的就尽量初始。
•C++是不是类型安全的?
–不是。两个不同类型的指针之间可以强制转换(用reinterpret_cast)。C#是类型安全的


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值