牛客刷题总结(第3天)

  1. 当基类构造函数需要外部传递参数才能进行初始化时,派生类必须显式定义构造函数,为基类传递参数;基类如果不需要传递或者可以不传递参数,派生类可以不用显式定义构造函数。
  2. 静态,常量数据成员在类中的初始化(转牛客网评论)
类型类内(声明)类外(类实现文件)构造函数中构造函数的初始化列表
非静态非常量数据成员NNYY
非静态常量数据成员NNNY(MUST)
静态非常量数据成员NY(MUST)NN
静态常量数据成员YYNN

以下三种类型必须通过初始化列表来初始化
1.非静态 常量
2. 引用类型
3. 没有默认构造函数的类类型
表格详细描述:
1. 静态常量数据成员可以在类内初始化(即类内声明的同时初始化),也可以在类外,即类的实现文件中初始化,不能在构造函数中初始化,也不能在构造函数的初始化列表中初始化;
2.静态非常量数据成员只能在类外,即类的实现文件中初始化,也不能在构造函数中初始化,不能在构造函数的初始化列表中初始化;
3.非静态的常量数据成员不能在类内初始化,也不能在构造函数中初始化,而只能且必须在构造函数的初始化列表中初始化;
4.非静态的非常量数据成员不能在类内初始化,可以在构造函数中初始化,也可以在构造函数的初始化列表中初始化;

class MyClass
{
public:
    MyClass();
    ~MyClass();
private:
    /*类内部*/
    int a1 = 0;           //非静态非常量数据成员:可在类内声明赋初值
    const int a2 = 0;       //非静态常量数据成员  :可在类内赋初值
    static const int a3 = 0;     //静态常量数据成员  :可在类内赋初值
    static int a4 = 0;         //静态非常量数据成员  :不可在类内赋初值
private:
 
};
/*类外部*/
int MyClass::a1 = 1;        //错误提示:非静态成员不能在其类外部定义
const int  MyClass::a2 = 2;      //错误提示:非静态成员不能在其类外部定义
const int MyClass::a3 = 3;       //正确
int MyClass::a4 = 4;           //正确
 
MyClass::MyClass():a1(1),a2(2)   /*初始化列表*/
{
    /*构造函数中赋值*/
    a1 = 10; 
    a2 = 10;    //错误提示:表达式必须是可修改的左值(a2是常量当然不可修改)
}
 
MyClass::~MyClass()
{
}
  1. a++和++a(转牛客网评论)
    more effective c++条款六中有写道:
    前置式:UPint& UPint::operator++()
    {
    *this+=1;
    return *this;
    }
    后置式:const UPint UPint::operator++(int)
    {
    UPint oldvalue=*this;
    ++(*this);
    return oldvalue;
    }
    很显然后置式是以前置式为基础的,所以前置式快一点。
  2. 不能被重载的运算符 1、. (成员访问运算符) 2、.* (成员指针访问运算符) 3、:: (域运算符) 4、sizeof(长度运算符) 5、?: (条件运算符)
  3. 如果一个对象说明为常对象,则通过该对象只能调用它的常成员函数。
  4. C++支持两种多态性:编译时多态性,运行时多态性。
    a.编译时多态性:通过重载函数和运算符重载实现。(静态多态性)
    b运行时多态性:通过虚函数和继承实现。(动态多态性)
  5. 纯虚函数格式:virtual <类型> <函数名> (<参数表>) = 0;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值