1,如果派生类和基类有相同名字的变量,派生类会覆盖基类的变量吗?
class A { int i; };
class B : public class A { int i; };
不会覆盖,只会隐藏,sizeof(A) = 4, sizeof(B) = 8可以证明这一点,隐藏的意思是说通过派生类的对象或指针无法访问基类的变量,实际上,编译器可能会对类的member加上class名称,形成独一无二的命名,这个过程叫做name-mangling, 处理后class B变成:
class B { int i1A; int i1B; } ;
2.为什么static member function不能用const修饰
static void foo() const {} //Error
我们都知道,const函数不能改变对象,那么它是怎样做到这一点的呢?答案是用const修饰this指针,内部转化过程:
void foo() const { } ----------------->void foo(const this) { }, 然而static函数没有this指针,所以也就没必要用const声明了。
3.一句话总结派生类如何利用基类:
我有的东西绝不跟你要,我没有的东西一定跟你要,如果你也没有,就算了。
4.哪些函数是虚函数(virtual function)?
(1).使用virtual关键字声明的: class A { virtual void foo() {} }; 这样的函数是virtual function
(2).从基类继承而来的,且重写(overrided)了:
class A { virtual void foo() {} }; class B : public class A { void foo() {} };
我们说Class B的foo()函数也是virtual function
(3).从基类继承而来的,没有重写:
class A { virtual void foo() {} }; class B : public class A { };
虽然class B没有foo()的定义,但class B有一个virtual function,那就是A::foo(),因为它是从class A继承而来的。
(4)基类的destructor是virtual的
class A { virtual ~A() {} }; class B : public class A { ~B() {} };
我们说class B的destructor也是virtual function
对于所有上述virtual function,编译器都会把它们的首地址保存在一个Virtual Table里面。
注意构造函数不
能是virtual functjion,从实现上来说,调用virtual
function需要保证设置好vptr,而调用造函数时这个vptr根本还没初始化,也就不能使用,所以不能把构造函数声明为virtual.
从实际意义来说,调用构造函数意味着想要创建一个类的对象,这个类是确定的,所以它所调用的构造函数也是确定的,故没必要把构造函数变为virtual。
4。满足哪些条件才会重载(overrid)基类的函数
C++标准规定,只有函数名,参数列,返回值类型都相同,才会重写,下列函数都会重载:
void func()-------void func()
virtual void func() ------void func()
void func() ---------virtual func()
virtuan void func() --------virtual void func()
注意这里的返回值支持多态,也就是如果class Derived : public Base那么这个函数也会重写
Base *clone() ---------Derived *clone()
5.以下两个函数有什么区别?
int k = 5;
int *j = k;
void func1( int * i) {}
void func2( int * & i) {}
本质上,两个函数的实参都是一个变量的地址,但有一点微小的却别。
func1的形参类型为int *,那么实参可以为指针变量,也可以为int变量的地址,所以有两种调用方式:
func1( &k );
func1( j );
func2的形参为指针的引用,那么实参必须是指针变量,所以只能这样调用:
func2( j )
6。友元函数的作用是什么?
大多数时候都会把类的data members声明为protected,这样的封装符合面向对象的设计原则,但有些时候我们会很想访问一个对象的protected成员,可以在类里面插入一个友元函数,把它的参数设为类的引用,然后在类的外面定义它,通过参数--对象的引用来访问protected成员。
7. 基类的虚析构函数的作用是什么?
阻止基类被实例化,如果基类有其它的virtual function,则虚析构函数就没必要,但如果基类没有其他的virtual function,则虚析构函数就很有必要了。
分享到:
相关推荐
《Essential C++》、《Effective C++》和《C++沉思录》是C++编程领域的经典之作,为深入理解和高效使用C++语言提供了宝贵的指导。这些书籍涵盖了C++的基础知识、高级特性以及最佳实践,是每一个C++开发者的重要参考...
### 《C++沉思录》关键知识点解析 #### 一、深入理解 C++ 核心概念 **设计哲学与特性解析:** Scoot Meyers 在《C++沉思录》中对 C++ 语言的核心概念进行了深入的剖析。本书不仅介绍了 C++ 的基本语法,更重要的...
《C++沉思录》是一本深受欢迎的C++编程教程,它深入探讨了C++语言的核心概念和技术,旨在帮助读者理解并掌握这门复杂的语言。该书的第21章通常会涵盖一些高级主题,可能包括模板元编程、STL(标准模板库)的深入使用...
在《C++模板编程》、《C++沉思录》和《C++代码设计与重用》这三部合集中,作者深入探讨了C++的核心概念和技术,特别是关于模板编程、设计模式和代码复用的策略。 《C++沉思录》是一部深度剖析C++哲学与实践的著作,...
《C++ 沉思录》是一本深受程序员喜爱的C++编程书籍,它深入探讨了C++语言的精髓和编程技巧。随书提供的实例源代码是理解和掌握书中的概念和实践的重要辅助材料。这些源代码涵盖了C++的基础到高级应用,旨在帮助读者...
根据提供的信息,我们可以推断出该文档主要涉及的是C++编程语言的学习资料——《C++沉思录》。虽然给出的部分内容主要是关于版权、转载规定以及联系方式等,并没有直接涉及技术内容,但我们仍然可以根据文档标题、...
根据提供的文件信息,这里主要涉及的是《C++沉思录》这本书的相关介绍。接下来,我将根据这些信息来展开相关的知识点。 ### C++沉思录简介 《C++沉思录》是一本针对C++语言深入讲解的经典著作,被广泛认为是学习...
《C++沉思录》是一本面向有一定C++编程经验的开发者所编写的书籍,它凝聚了作者10年的编程智慧和实践经验。该书旨在帮助读者深入理解C++语言的本质,提升编程技巧,从而达到精通C++程序设计的水平。 在C++的世界里...
根据提供的信息,《C++沉思录》一书是由Andrew Koenig和Barbara Moo共同编著,由黄晓春翻译的。这本书对于深入理解和掌握C++语言有着非常重要的作用,被视为学习C++的一个优秀资源。 ### C++沉思录的核心知识点 ##...
《C++沉思录》--十年编程生涯的真知灼见
《C++沉思录》是C++编程领域中一本经典的著作,它深入探讨了C++语言的核心概念和设计哲学。第八章“一个面向对象程序的范例”是书中的一个重要章节,旨在通过一个完整的示例来阐述面向对象编程(OOP)在实际应用中的...
#include <stdio.h>class Trace{public:Trace(){noisy=0;f=stdout;}Trace(FILE*ff){noisy=0;f=ff;}void print(char*s){if (noisy)fprintf(f,"%s",s);}void on(){noisy=1;}void off(){noisy=0;}private:int noisy;...
《C++沉思录》是一本深受欢迎的C++编程指南,它以其深入浅出的讲解方式和对C++核心概念的透彻分析而著称。这本书旨在帮助读者理解C++语言的内在机制,提升编程技能,从而更好地利用C++进行软件开发。以下是基于这个...
《C++沉思》与《C++编程思想》是两部深受C++程序员喜爱的经典著作,它们深入浅出地探讨了C++语言的核心概念、设计模式以及编程实践。这两本书籍对于想要提升C++技能或者对面向对象编程有深度理解的人来说,是不可或...
C++沉思录.pdf作为压缩包中的唯一文件,很可能就是该书的电子版。这本PDF文件可能会涵盖以下几个方面的高级C++知识点: 1. **面向对象编程**:C++的基石是面向对象编程,书中可能会深入讲解类的设计原则,如封装、...
C\C++编程开发PDF[15本].rar C Primer Plus 5th C Primer_Plus C++ Primer Plus 6th ...C++ 沉思录 C++ 程序设计原理与实践 C++ 高级编程_本地没有找到 C++ 语言99个常见编程错误 C++ 语言的设计和演化
c++沉思录.pdf; Effective_STL.chm; effectiveC++.chm; Thinking in C++ 中文版.pdf; 标准C++输入输出流与本地化.pdf; 泛型编程与STL.pdf; 美河提供.STL.源码剖析.pdf; 高质量C++C编程指南.pdf; 计算机算法...
《C++沉思录(中文版)》深入探讨了C++的设计哲学和语言细节,适合想要深入研究C++的开发者。 《C++代码设计与重用》关注代码质量和可维护性,讲解如何编写高效、可读性强的C++代码,并强调代码重用的重要性。 ...
在本压缩包中,包含四本极具影响力的C++学习资料,分别是《C++沉思录》、《C++程序设计原理与实践》、《C++设计新思维》以及《Thinking in C++》。这些书籍覆盖了C++的基础、进阶到设计模式等多个方面,对于想要深入...
* 《C++ 沉思录》:这本书详细介绍了 C++ 的高级语法和编程技术,是 C++ 程序员的必备书籍。 阶段三:高级阶段 在 C++ 的发展方向中,高级阶段是专家阶段,程序员需要掌握 C++ 的高级技术和框架。本阶段推荐的书籍...