您的位置:首页 > 编程语言 > C语言/C++

cpp复习

2014-09-18 12:27 155 查看
腾讯的不定项选择真的很忧伤,我都没法确定笔试能不能过了。

好的,下面我们来复习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 const* const 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是一个随机的数字,2为0。n在C++中,成员变量的初始化顺序与变量在类型中的申明顺序相同,而与它们在构造函数的初始化列表中的顺序无关。因此在这道题中,会首先初始化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#是类型安全的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++