C++的继承,封装,多态

C++是面向对象的语言,因此他和JAVA一样有面向对象语言的三大基本特征:封装,继承,多态。
封装:封装字面意思就是打包,包装起来,看不见里面是啥。稍微专业点就是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象,通过限制属性和操作的访问权限(public, protected,private),可以将属性“隐藏”在对象的内部,那都隐藏了外面就不好操作了,放心,这里会提供一定的接口,在对象之外只能通过这个接口对对象进行操作。就像开车给你钥匙,你会开车就能把车开走,具体车里面的发动机啥的不需要你知道,也不用知道。封装增强了对象的独立性,从而保证了对象的独立性。如下代码

#include <iostream>
#include <cstring>

using namespace std;

class People
{
    private:             //私有的属性不允许类的外部访问   封装
        char m_name[32];
        int m_age;
        int m_id;

    public:
        People()  //构造函数
        {

        }

        void SetValue(char *name, int age, int id)    //通过这个函数来改变私有变量的成员值
        {
            strcpy(m_name,name);
            m_age = age;
            m_id = id;
        }

        void print()   //打印
        {
            cout<<"m_name = "<<m_name<<" m_age = "<<m_age<<" m_id = "<<m_id<<endl;
        }
    
};


int main(int argc, char const *argv[])
{
    People p;
    p.SetValue("zhangsan",20,1010);  //输入值
    p.print();

    return 0;
}

继承:继承表达了对象的一般与特殊的关系,特殊类的对象具有一般类的全部属性和服务。我定义一个类之后,还需定义一个类,但是这个类和第一个定义的类中属性和方法只是增加了一些属性和操作,这时我们就可以用原来的类派生一个新类,只需在新类中描述自己所特有的属性和操作即可。所以说继承大大简化了对问题的描述,提高了程序的可重用性,也提高了程序设计,修改,扩充的效率。
在这里插入图片描述

#include <iostream>
#include <cstring>

using namespace std;

class Person    //父类或者基类
{
    protected:
        char m_name[32];
        int m_age;
    
    public:
        Person()
        {
            strcpy(m_name,"小苗");
            m_age = 18;
        }
};

class Student:public Person     //子类或者派生类,public继承权限
{
    private:
        int id;
    
    public:
        Student(int id)
        {
            this->id;
        }

        void show()
        {
            cout<<"m_name = "<<m_name<<" m_age = "<<m_age<<" id = "<<id<<endl;
        }
};

int main(int argc, char *argv[])
{
    Student s1(100);
    s1.show();
    
    return 0;
}

多态:多态性是指同一个消息被不同对象接收时,产生不同的结果,即实现同一接口,不同方法。在一般类中定义的属性和操作,如果在特殊类中不改变其名字, 通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
实现多态的三个先决条件
进行了类的继承;
子类与父类写了结构相同的函数(并且基类的函数是虚的);
使用了基类指针指向了子类的对象

语法:

#include <iostream>
#include <cstring>

using namespace std;
//条件1,2
calss A{
	public:
		virtual void print(){}   //虚函数
};
class B:public A{
	public:
		void print(){}
};
//条件3
int main(){
	A *p;
	B q;
	p=&q;(基类的指针指向子类的对象)//此时便可以进行多态实现
	return 0;
}

实例:基类自己和他的派生类去打架,实现多种状态,打输了,打赢了。

//实现多态的案例;
#include<iostream>
using namespace std;
class OUr {
public:
	int a=15;
	virtual int get() {//进行虚函数处理;仅仅将这一个函数进行了虚函数处理;
		return a;//其他没有进行虚处理的函数还会有老的问题
	}
	void print() {
		cout << "我是父亲" << endl;
	}
};
class him :public OUr{
public:
	int h=25;
	int get() {
		return h;
	}
	void print() {
		cout << "我是 Tom" << endl;
	}
};
class me :public OUr {
public:
	int m=30;
	int get() {
		return m;
	}
	void print() {
		cout << "我是 zsc" << endl;
	}
};
class Diren {
public:
	int D = 26;
	int get() {
		return D;
	}
	void print() {
		cout << "我是Diren" << endl;
	}
};
void zhanzheng(OUr* p, Diren& a) {
	if (p->get() > a.get()) {
		cout << "我们将敌人秒杀了" << endl;
	}
	else {
		cout << "我们败北" << endl;
	}
}
int main_02() {
	OUr * p;
	him friends;
	me zsc;
	Diren DDD;
	p = &friends;
	zhanzheng(p,DDD);
	p = &zsc;
	zhanzheng(p, DDD);
	p->print();//打印基类的print函数;
	return 0;
}

在这里插入图片描述

C++中,继承封装多态是面向对象编程的三个基本特征。销售管理系统是一个典型的面向对象程序设计的例子,可以使用C++中的继承封装多态来实现。 1. 继承 继承是指一个类可以从另一个类中继承属性和方法。在销售管理系统中,可以定义一个基类Sales,包含一些通用的属性和方法,如销售日期、销售数量、销售金额等。然后定义一些派生类,如ProductSales、ServiceSales等,继承Sales类,并添加一些特定的属性和方法。 2. 封装 封装是指将数据和方法封装在一个类中,对外部隐藏实现细节,只提供公共接口。在销售管理系统中,可以将Sales类的属性和方法封装起来,只提供一些公共的接口,如添加销售记录、查询销售记录等。 3. 多态 多态是指同一种操作作用于不同的对象上面,可以产生不同的执行结果。在C++中,可以通过虚函数来实现多态。在销售管理系统中,可以将Sales类的某些方法定义为虚函数,然后在派生类中重写这些虚函数,以实现不同的执行结果。 下面是一个简单的C++销售管理系统的示例代码: ```cpp #include <iostream> #include <string> using namespace std; class Sales { public: Sales(string date, int quantity, double amount) { this->date = date; this->quantity = quantity; this->amount = amount; } virtual void print() { cout << "Date: " << date << endl; cout << "Quantity: " << quantity << endl; cout << "Amount: " << amount << endl; } protected: string date; int quantity; double amount; }; class ProductSales : public Sales { public: ProductSales(string date, int quantity, double amount, string product) : Sales(date, quantity, amount) { this->product = product; } void print() { cout << "Product: " << product << endl; Sales::print(); } private: string product; }; class ServiceSales : public Sales { public: ServiceSales(string date, int quantity, double amount, string service) : Sales(date, quantity, amount) { this->service = service; } void print() { cout << "Service: " << service << endl; Sales::print(); } private: string service; }; int main() { Sales* sales1 = new ProductSales("2021-01-01", 10,100.0, "Product A"); Sales* sales2 = new ServiceSales("2021-01-02", 5, 50.0, "Service B"); sales1->print(); sales2->print(); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值