C++基础知识(5)

29、拷贝构造函数什么时候会被调用?
(1)用=定义变量时会调用拷贝构造

(2)将一个对象作为实参传递给一个非引用类型的形参

(3)从一个返回类型为非引用类型的函数返回一个对象

(4)用花括号列表初始化一个数组中的元素或者一个聚合类中的成员

30、为什么C++中的拷贝构造函数的形参只能使用引用传递?

(1)如果使用值传递的话,那么调用拷贝构造函数的时候,首先需要将实参传递给形参,这个传递的时候又要调用拷贝构造函数,这样就会造成无限递归,最后发生栈溢出,但事实上编译器在语法检查上就已经是禁止这种行为的。

(2)如果使用指针传递,这样定义的构造函数实际是一个自定义的有参构造函数,而并非拷贝构造。拷贝构造函数只有一个,如果自定义了拷贝构造函数,编译器直接调用自定义的拷贝构造,否则编译器会自动合成一个。(详细可以看另一篇博客:为什么C++中的拷贝构造函数的形参不能使用值或者指针传递?

31、C++中类成员的访问权限

C++通过public、protected、private三个关键字来控制成员变量和成员函数的访问权限,它们分别表示公有的,受保护的,私有的,被称为成员访问的限定符。但是这种访问权限只是针对类外的,类内没有访问权限,都是可以互相访问的。类外只能通过对象访问成员,并且只能访问public属性的成员。

(1)public:可以被该类中的函数,子类的函数,友元函数访问,也可以被该类的对象在类外访问;

(2)protected:可以被该类中的函数,子类的函数,友元函加粗样式数访问,但是不能被该类的对象在类外访问;

(3)private:可以被该类中的函数,友元函数访问,但是不能被子类的函数,该类的对象访问。

32、struct和class的区别

(1)在C++中,可以用struct和class定义类,都可以继承,在C语言中只有struct没有class;

(2)struct的默认继承权限和默认访问权限是public,但是class的默认继承权限和默认访问权限是private;

(3)class还可以作为模板类的形参,比如template<class T,int i>

33、C++面向对象的三大特征是什么?

(1)封装:将客观事物封装为抽象的类,而类可以把自己的数据和方法暴露给可信的类或者对象,对不可信的类或者对象则进行信息的隐藏。

(2)继承:可以使用现有类的所有功能,并且无需重新编写原来的类既可对功能进行拓展。

(3)多态:一个类实例的相同方法在不同情况下有不同的表现形式,使不同内部结构的对象可以共享相同的外部接口。

34、动态绑定是如何实现的?

当编译器发现类中有虚函数时,会创建一张虚函数表,把虚函数的函数入口地址放到虚函数表中,并且在对象中增加一个指针vptr,用于指向类的虚函数表。当派生类覆盖基类的虚函数时,会将虚函数表中对应的指针进行替换,从而调用派生类中覆盖后的虚函数,从而实现动态绑定。

35、为什么基类的构造函数不能定义为虚函数?

虚函数的调用依赖于虚函数表,而指向虚函数表的指针vptr需要在构造函数中进行初始化,所以无法调用定义为虚函数的构造函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czy1219

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值