C++ 类的使用与注意事项

本文介绍了C++中类的声明与实现,包括使用`virtual`修饰基类析构函数以实现多态,以及派生类如何继承基类的成员。在继承部分,讨论了不使用和使用基类构造函数的情况,展示了构造与析构函数的调用顺序。最后,提到了C++的多态性,包括静态多态(重载)和动态多态(重写)的概念。
摘要由CSDN通过智能技术生成

一、创建

1、用class来声明一个类,一般用virtual来修饰基类的析构函数,使其变为虚函数,在继承部分会详细说明。

//Child.h
//声明一个 Child类,这个类继承(派生)自Parent基类
//派生类能够继承和访问基类的非private修饰的成员
class Child : public Parent {

public:
	//共有成员
	Child();//声明默认构造函数
	Child(const Child& other); //声明拷贝函数;
	const Child& operator=(const Child& other); //声明赋值函数
	~Child();	//声明析构函数

private:
	int data;	//私有成员
};
//Child.cpp
//在cpp文件中实现
//如果不想用基类的默认构造函数,可以通过向基类传入参数来调用其他构造函数来初始化基类成员变量
Child::Child(param) : Parent(param1,param2)
{
}

Child::Child(const Child& other)
{
}

const Child& Child::operator=(const Child& other)
{
	// TODO: 在此处插入 return 语句
}

Child::~Child()
{
}

 

二、继承

1、不使用基类构造函数

        派生类在继承基类时,可以继承和访问基类public、protected修饰的成员。

        当创建派生类实例时,会先调用基类的构造函数(一般是默认构造函数),再调用派生类的构造函数;创建派生类实例销毁时,则顺序相反,先调用派生类析构函数、再调用基类析构函数。

//定义一个基类Base和他的派生类Derived
class Base {
public:
    Base() {
        std::cout << "Base()\n";
    }
    ~Base() {
        std::cout << "~Base()\n";
    }
};
              
class Derived : public Base {
public:
    Derived() {
        std::cout << "Derived()\n";
    }
    ~Derived() {
        std::cout << "~Derived()\n";
    }
};
int main() {
    Derived d;  //创建派生类Derived的实例d
    Base b;    //创建基类Base的实例b
    return 0;
}

 输出结构如下:

//创建派生类Derived的实例时的输出 

Base()
 Derived()      

   //创建基类Base的实例b的输出
 Base()

//先销毁实例d
 ~Derived()
 ~Base()

//后销毁实例b
 ~Base()

         C++中,局部变量是先创建先销毁,故创建时先创建Derived实例d,再创建Base实例b;销毁时,先销毁实例d,再销毁实例b。

        在创建Derived实例d时,先执行基类Base的构造函数,再执行派生类Derived的构造函数;

销毁时,先执行派生了的析构函数,再执行基类的析构函数。

2、使用基类构造函数

        当想要继承一个基类,拥有其全部功能,但只改写一些成员函数时;可以用using + 基类构造函数名来声明继承其构造函数。这样,当创建派生类时,就会调用基类构造函数。同时、有同名成员函数,会隐藏基类的成员函数,这样就起到只改写一些功能而不会影响其他操作。

//例如继承string类
using std::string::string; // 继承构造函数

三、多态

1、静态多态

1.1 重载

2 、动态多态

1.2 重写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值