C++主要特性/优势

总结c++相对于c的个性之处,主要包括:类与继承/派生,函数/变量的多态/重载,虚函数与纯虚函数,抽象类,数据封装。
1.类的继承/派生
类的定义形式:

class FA
{
public:
int a;
int b;
fun1()
{...}
}

类的继承
class FB:public FA
{…}

类的对象/实例化:

FA s;
s.a= ;
s.b= ;
s.fun1();

父类可以作为指针指向子类,但是子类不能作为指针指向父类,这是因为子类含有父类没有的东西。

FB S;//子类FB实例化对象
FA *p=&S;//父类指针p指向子类对象S
p->a=1;//访问子类成员变量

这里说父类派生出了子类,或者子类继承了父类。

2.函数/变量的多态/重载
所谓多态或者重载无非就是同一个变量名或函数出现多次定义,即虽然是一个接口,但是可以选择多种形态。
对于多态,通常是对于类的虚函数而言,即子类对于父类的虚函数可以进行重新定义。多态分为早绑定和晚绑定。在编译时候确定了函数的地址,这个属于早绑定,是静态的;而编译时候不能确定从而绑定函数的地址,则属于晚绑定。输出一般是子类的效果!
重载对于函数和变量而言,只是名字相同,而变量/函数的类型,成员变量等都要变化。
如:

int x;
float x;//虽然变量名相同,但是类型不同。
int fun1();
long fun1();//虽然函数名相同,但是类型不同。
int fun1(intx, int y, bool isMax);
int fun1(intx, int y);//虽然函数名相同,但是参数不同,也为重载。

3.虚函数与纯虚函数
对于类而言,其虚函数可以被重新定义,并且子类重定义时候必须跟父类在类型和数量上一致。定义为:

virtual void fun1()
{}

纯虚函数就是只有声明,没有定义,上面就是一个纯虚函数

4.构造函数和析构函数
首先对于每个类必须有构造函数和析构函数,即使你不定义,那么系统也会有一个默认的。当你调用类的时候就会自动调用构造函数,当程序结束的时候,又会自动调用析构函数。一般对于申请堆的情况,自定义一个析构函数,用于释放内存,防止内存泄漏。
案例:

class student
{
public:
int score;
string name;
void behavior();

public:
student()
{cout<<helloworl!<<endl;}//构造函数
~student()
{}//析构函数
};

student::behavior()
{}

void main()
{
student xiaoming;
xiaoming.behavior();
xiaoming.score=10;
}

5.数据封装
数据封装应用了类的特性,将数据放到类的私有成员里面,从而该数据变量或者函数只能被类内访问,不能被类外访问,从而保护了变量的安全性。案例如下:

#include "stdio.h"
#include"iostream"
using namespace std;

class student
{
public:
    int score;
    float age;
    void fun() {
        cout << "fun1" << endl;
    }
    void pub1();
    void large()
    {
        //ss虽然是私有变量,但是可以在类里面被调用,但是外部是无法访问的,因此形成了数据的封装。
        int ss = 100;
        cout << "ss is:" << ss << endl;
    }
private:
    int ss;
    void fun2()
    {
        cout << "hello private" << endl;
    }
    void pre();
};


 void student::pub1()
 {
     cout << "hello public" << endl;
 }

 void student::pre()
 {
     cout << "hello!" << endl;
 }


 //公有继承student类
 class std1 :public student
 {
 public:
     int ss1;
 private:
     void get()
     {
         cout << "get!" << endl;
     }
 };

 int main()
 {

     student xiaoming;
     xiaoming.fun();
    // xiaoming.fun2();//私有成员,不可访问!
     xiaoming.score = 3;

     xiaoming.large();

     std1 xiaohua;
     xiaohua.age = 12;//类std1继承了student父类所有特性,除了私有成员
//   xiaohua.ss = 22;//也是无法访问私有成员,从而形成了数据封装
     xiaohua.large();
     return 0;
 }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值