12 C++二义性,多态,纯虚函数,模版函数

96 阅读1分钟

Android Ndk 学习笔记(目录)

1 继承

class  Person {
public:
    string name ;
    Person(string name ):name(name){}
};

class  Course {
private:
    string name;
public:
    Course(string name) :name(name) {}
};

// 成员变量中存在类对象时 ,需要在 构造函数中 ,进行初始化
class  Student : public Person {
private:
    string name ;
    Course course ;
public:
    Student(string name1,  Course course) : Person(name), course(course) {

    }
};

// 2.多态(虚函数)。
// 动态多态(程序的角度上:程序在运行期间才能确定调用哪个类的函数 == 动态多态的范畴)
// Java语言默认支持多态
// C++默认关闭多态,怎么开启多态? 虚函数 在父类上给函数增加 virtual关键字
// 静态多态 (编译期已经决定,调用哪个函数了,这个就属于静态多态的范畴) 重载(静态多态)

在这里插入图片描述
在这里插入图片描述

class Fulei{

public:
     void show(){
        cout << "Fulei show" << endl ;
    }
};
class YijiZilei : public Fulei{
public:
    void show(){
        cout << "YijiZilei show" << endl ;
    }
};
class ErjiZilei : public Fulei{
public:
    void show(){
        cout << "ErjiZilei show" << endl ;
    }
};
void userFulei(Fulei * fulei){
    fulei->show();
}

int main(){
    YijiZilei * yijiZilei = new YijiZilei();
    ErjiZilei * erjiZilei = new ErjiZilei();
    userFulei(yijiZilei);
    userFulei(erjiZilei);

    delete yijiZilei;
    delete erjiZilei;

    return 0 ;
}

4 静态多态 ,通过 传入的参数 进行区分

void add(int number1, int number2) {
    cout << number1 + number2 << endl;
}

void add(float number1, float number2) {
    cout << number1 + number2 << endl;
}

void add(double number1, double number2) {
    cout << number1 + number2 << endl;
}

int main() {
    add(10000, 10000);
    add(1.9f, 2.8f);
    add(545.4, 654.54);

    return 0;
}

5 纯虚函数
在这里插入图片描述
在这里插入图片描述


//5 纯虚函数 ,类似于 Java 的 抽象类


class TempClass{

public:

    virtual void initView() = 0 ; // 纯虚函数
    virtual void initData() = 0 ; // 纯虚函数

};


// 如果不实现 virtual 修饰的方法 ,这 HomeClass 无法实例化
class HomeClass : TempClass{

    void initView() {

    }
    void initData() {

    }
};



int main(){

    HomeClass * ha = new HomeClass();

    return 0 ;
}

7 模板函数

// 模板函数  == Java的泛型解决此问题
template <typename TT>
void addAction(TT n1, TT n2) {
    cout << "模板函数:" << n1 + n2 << endl;
}

int main() {
    addAction(1, 2);
    addAction(10.2f, 20.3f);
    addAction(545.34, 324.3);
    addAction<string>("AAA", "BBB");

    /*addAction(2, 324.3);
    addAction(54, 324.3f);*/
    return 0;