Table of Contents:

在类的内部定义成员函数的函数体,这种函数会具备那种属性?

答:这种函数会自动为内联函数,这种函数在函数调用的地方在编译阶段都会进行代码替换。

C++编译器自动为类产生的四个缺省函数是什么?

A()
A(const A&) //默认拷贝构造函数,如果类带有指针变量,并有动态内存分配,则它必须有一个拷贝构造函数
~A() //默认析构函数
A& operator = (const A &) //默认赋值函数,重载的赋值运算符

对象不存在,且没用别的对象来初始化,就是调用了构造函数;
对象不存在,且用别的对象来初始化,就是拷贝构造函数
对象存在,用别的对象来给它赋值,就是赋值函数。
其中只有默认赋值函数最复杂,该函数的实现如下:

Test & operator=(const Test &obj)
{
    if(this !=&obj)
    {
        data=y.data;
    }
    return *this;
}

什么时候必须重写拷贝构造函数?

答:当构造函数涉及到动态存储分配空间时,要自己写拷贝构造函数,并且要深拷贝。

拷贝构造函数在哪几种情况下会被调用?

1.当类的一个对象去初始化该类的另一个对象时;
2.如果函数的形参是类的对象,调用函数进行形参和实参结合时;
3.如果函数的返回值是类对象,函数调用完成返回时。

构造函数的调用顺序是什么?

1.先调用基类构造函数
2.按声明顺序初始化数据成员
3.最后调用自己的构造函数体。

使用初始化列表和在构造函数内赋值的区别?

一、在有些情况下,必须使用初始化列表。特别是const和引用数据成员被初始化时,因为他们不能被赋值
二、是从效率方面来说的,对于内置类型或复合类型,差异不会太大,但对于非内置数据类型,差异还是很明显的,因为其执行了:一次初始化 + 一次赋值

哪几种情况必须用到初始化成员列表?

类的成员是常量成员初始化;
类的成员为引用时。
类的成员是对象成员初始化,而该对象没有无参构造函数。

在类外有什么办法可以访问类的非公有成员?

友元(如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend),
继承
公有成员函数。

不允许重载的5个运算符是哪些?

  1. .*(成员指针访问运算符号)

  2. ::域运算符

  3. Sizeof 长度运算符号

  4. ?:条件运算符号

  5. .(成员访问符)

    对对象成员进行初始化的次序是什么?

    答:它的次序完全不受它们在初始化表中次序的影响,只有成员对象在类中声明的次序来决定的。

    是不是一个父类写了一个virtual 函数,如果子类覆盖它的函数不加virtual ,也能实现多态?

    答:
    virtual修饰符会被隐形继承的。
    virtual可加可不加,子类覆盖它的函数不加virtual ,也能实现多态。

    C++四种类型转换运算符