今日c++知识点总结

1.      const char *p和char * constp有什么区别?

Const char *p:表示的是指针指向的内容不能修改;//(*p)++是不可以的;

char * Const p:表示的是指针指向的内容可以修改,p本身的内容(指的是地址)不可修改;//比如一开始初始化的时候p = &a;但是现在p = &b;这样是不对的

 

2.      有参宏有什么bug?应该怎么避免这些bug ?

(1):有参宏只是简单的替换,替换后可能会出现优先级上的错误;通过将宏的参数用括号括起来,可以修复这个bug;

(2):举个例子来说明

   #define ADD(a,b)    (a)+(a)+(b)

   Int nNum = 0;

   ADD(++nNum,nNum++);

  ++nNum + ++nNum +nNum++;

如宏的参数使用自增或者自减运算符时,就会出现问题;可以使用内联函数来解决此问题;

 

 

3

new和delete:用于元素的申请

new[]和delete[]用于数组的申请;

例如:

#include <stdlib.h>

#include <ostream>

#include <iostream>

 

using std::cout;

using std::endl;

 

 

int main()

{

    int *pBuf =new int[15];

    int *pNum =new int('HE');

    cout << *pNum <<endl;

    delete pNum;

    delete[] pBuf;

    system("pause");

   return 0;

}

 

4.在c语言中,出现两次以上同名函数,就会报错;

在C++中则不会报错,,

函数名可以相同,但是参数个数、类型或者参数顺序必须不同

 

5.假如定义函数时给出5个形参,在传参时是否可以缺省一部分参数?如果可以,应该使用什么语法来完成?

是可以的,只不过在函数声明或者定义时,可以给形参赋予一些默认数值,这样在传参时就可以缺省,下面举个例子来说明

Void Fun (int n1,int n2,int n3=0,int n4=0,int n5=0){

 

}

Fun(1,2);//此时默认传的值为Fun(1,2,0,0,0)

 

 

6.有关命名空间的一些小问题

在同一个文件中,如果出现了两个同名同参的函数,怎么在不修改函数名和原型的前提下解决这个错误?

简单举个例子:

head.h

void fun(){}

 

main.cpp

#include "head.h"

 

int main()

{

    fun();

fun();

}

上面显然会报错,因为main函数里面有两个一模一样的fun函数(在同一个作用域下有两个同名函数),在编译时会发生错误

 

head.h

void fun(){}

 

main.cpp

#include "head.h"

 

namespace MYNAMESPACE{

    int fun(){}

};

//using MYNAMESPACE;有了这句话,下面的MYNAMESPACE::fun();中的MYNAMESPACE::部分就可以不用写了,不过此时在本题中会报错,因为又出现了上面的错误

int main()

{

    fun();

    MYNAMESPACE::fun();

}

7.面向对象程序设计的三大特点:封装,继承和多态

 

8.C++如何通过语法来实现封装性?

首先解释一下为什么需要封装,平常我们在写程序的时候,可能会遇到这样的bug ,就是说一个数据被某个函数所修改了,发生了错误,但是在这个程序里面有很多函数去修改它,这时候你不得不一个函数一个函数去排查,这样比较麻烦,有了封装性以后,可以通过设置访问权限(把数据设为私有的),这样的话,你非要想修改这个数据,只能通过成员函数;即使出现逻辑上的错误,只要查看修改此成员函数即可。

三大访问控制符:

Public: 公有成员,在类的外面也可以访问

Protected:保护成员,类内可以访问,类外不能访问,(在子类中可以访问)

Private:私有成员,类内可以访问,类外不能访问,(在子类中可以访问)。

 

9.this 指针是指什么?

指的是一个对象的内存首地址

This指针指向正在调用的这个成员函数的对象,如果没有.this 指针,就不知道是哪个对象调用了类里面的数据

 

10.有关引用的一些小问题

引用的一些性质:

不占用内存空间(它的内存空间和被引用的变量大额内存是同一块内存)

必须初始化;(一般在初始化变量时,初始值会被考虑到新建的对象中;然而定义引用时,程序把引用和它的初始值捆绑在一起,而不是将初始值直接拷贝给引用。一旦初始化完成,引用和它的初始值对象一直捆绑在一起。因为无法令引用重新捆绑到另一个对象,因此引用必须初始化。

初始化之后不能被修改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值