牛客网C++题目总结(一)

准备从今天开始好好在牛客网上练习一些题提高代码能力,最近不知道在干些什么,所以想现在开始写总结。

一、函数指针的定义:

C++指向函数的指针定义方式为:
返回类型  (*指针名)  (函数参数列表)  ,例如 void (*p)(int)是指向一个返回值为void 参数为int类型的函数
例如 : void (*q)(Base,Base)
就是一个返回类型为void,参数列表有两个Base(这里是类名)类的参数
二、运算的一些注意点:
下列程序的输出结果为()。
1
2
3
4
5
6
main()
{ int m=7,n=4;
float a=38.4,b=6.4,x;
x=m/2+n*a/b+1/2;
printf ( "%f\n" ,x);
}

例如上面这道题,显示结果为27.000000,原因是m为整型变量,m/2虽然为3.5,但是因为是整型,就取

的3。同理1/2位0,所以结果就是27.000000而不是28.000000。
三、内存对齐原则:

一、结构体变量的首地址能够被其最宽基本类型成员大小与对齐基数中的较小者所整除;
二、结构体每个成员相对于结构体首地址的偏移量(offset)都是该成员大小与对齐基数中的较小者的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding);

三、结构体的总大小为结构体最宽基本类型成员大小与对齐基数中的较小者的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)

在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是: 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct A
{
  int a;
  short b;
  int c;
  char d;
};
struct B
{
  int a;
  short b;
  char c;
  int d;
}

结构体(struct)(或联合体(union))的数据成员,每个数据成员的对齐按照编译选项指定的数据成员自身长度中,最长的那个。
A:
4(int)+4(short不够4,补2)+4(int)+4(char 不够4,补3) = 16
B:
4(int)+4(char 为1,short为2 ,补1)+4(int) = 12

四、虚函数的应用:
以下程序的输出是
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Base {
    public :
    Base( int j): i(j)  {}
    virtual ~Base() {}
    void func1() {
        i *= 10;
        func2();
    }
    int getValue() {
        return   i;
    }
    protected :
    virtual void func2() {
        i++;
    }
    protected :
    int i;
};
class Child: public Base {
    public :
    Child( int j): Base(j) {}
    void func1() {
        i *= 100;
        func2();
    }
    protected :
    void func2() {
        i += 2;
    }
};
int main() {
    Base * pb = new Child(1);
    pb->func1();
    cout << pb->getValue() << endl; delete pb; }
最后的输出是12,原因为:
基类的指针指向派生类的对象
基类指针调用其虚成员函数,则会调用其真正指向对象的成员函数,而不是基类中定义的成员函数,若不是虚函数,则不管基类指针指向的是哪个派生对象,调用的都是基类中定义的那个函数。

其他也没什么学到的新知识了,主要是不细心,这一点很难受
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值