C++常考知识点

目录

1.函数重载 函数覆盖什么区别?

2.类的公有成员和私有成员有什么区别?

3.什么是多态,多态达成条件是什么?结合代码进行表达。

4.抽象类有什么用?如何实现,结合代码解释

5.C++中的空类,编译器默认会提供哪些缺省的成员函数,并将函数写出来。

6.解释拷贝构造函数中的深拷贝和浅拷贝

7.继承情况下,并且父类中有成员对象时。创建子类对象,调用构造函数和析构的顺序是什么样的?


1.函数重载 函数覆盖什么区别?

函数重载:同一作用域(类),同名函数,参数顺序、个数、类型不同都可以重载。函数的返回值类型不能作为重载条件。

函数覆盖: 有继承,子类重写父类的虚函数。返回值类型、函数名、参数顺序、个数、类型都必须一致。

2.类的公有成员和私有成员有什么区别?

      public: 在本类中可以访问  在子类中可以访问  全局可以访问

      private: 在本类中可以访问   在子类中不可以访问 全局不可以访问

3.什么是多态,多态达成条件是什么?结合代码进行表达。

   多态:

      一个接口多种状态,调用一个函数,根据传入对象的不同,来执行相应对象的方法。

   三个条件:(公鸡孵蛋,真变态)

       1.公有继承

       2.基类指针指向派生类

       3.子类覆盖基类虚函数

#include <iostream>

using namespace std;
class Animal{
public:
    virtual void eat(){
        cout<<"吃东西"<<endl;
    }

};

class Cat:public Animal{
public:
    void eat(){
        cout<<"吃猫粮"<<endl;
    }
};

class Dog:public Animal{
public:
    void eat(){
        cout<<"吃狗粮"<<endl;
    }
};

class Panda:public Animal{
public:
    void eat(){
        cout<<"吃竹子"<<endl;
    }
};

void AnimalEat(Animal& a){
    a.eat();

}


int main(){
    Cat c;
    AnimalEat(c);

    Dog d;
    AnimalEat(d);

    Panda p;

    AnimalEat(p);
}

运行结果:

4.抽象类有什么用?如何实现,结合代码解释

抽象类

       只是一个抽象的概念,给派生类提供一个框架作用。

       只通过虚函数来实现。

#include <iostream>

using namespace std;
class Shape{
public:
    virtual void S() = 0;
    virtual void C() = 0;

};

class yuan:public Shape{
public:
    virtual void S(){
        cout<<"圆的面积"<<endl;
    }
    virtual void C(){
        cout<<"圆的周长"<<endl;
    }
};

int main(){
    yuan y;
    y.C();
    y.S();
}

运行结果:

5.C++中的空类,编译器默认会提供哪些缺省的成员函数,并将函数写出来。

Person类 :有构造、析构、拷贝、赋值运算符

class Person{
Person();
~Person();
Person(const Person& p);
Person& operator = (const Person& p);
};

6.解释拷贝构造函数中的深拷贝和浅拷贝

浅拷贝:

          如果在类中没有显示地声明一个拷贝构造函数,那么编译器将会自动生成一个默认的拷贝构造函数,该构造函数完成对象之间的值的赋值。

深拷贝:

          类内成员变量需要动态开辟堆内存,如果实行浅拷贝,也就是把对象里的值完全复制给另一个对象,如A=B。这时,如果B中有一个成员变量指针已经申请了内存,那A中那个成员变量也指向同一块内存。这就出现了问题,两个对象的指针指向同一块内存地址,当B把内存释放了(如:析构),A再释放时,空间已被释放,所有会出现错误。

7.继承情况下,并且父类中有成员对象时。创建子类对象,调用构造函数和析构的顺序是什么样的?

(成父成子)

  • 父类的成员对象
  • 父类的构造函数
  • 子类的构造函数
  • 子类的析构函数
  • 父类的析构函数
  • 父类的成员对象销毁了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值