Qt之C++
类的定义
C语言的灵魂是指针
C++的灵魂是类,类可以看出C语言结构体的升级版,类的成员可以是变量,也可是函数。
class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度
};
定义对象
对象是类的实例化
直接定义
Box mybox;//Box是类,mybox是对象
在堆中定义
Box *youbox = new Box;//在堆中定义对象youboxdelete youbox;//删除对象,释放堆里面的内存
访问对象中的成员
类的对象的公共数据成员可以使用直接成员访问运算符 . 来访问。
//普通变量通过. 指针通过->Box mybox;//Box是类,mybox是对象mybox.length = 10;Box *youbox = new Box;//在堆中定义对象youboxyoubox->length = 20;delete youbox;//删除对象,释放堆里面的内存
类成员函数
类的成员函数是指那些把定义和原型写在类定义内部的函数,就像类定义中的其他变量一样。类成员函数是类的一个成员,它可以操作类的任意对象,可以访问对象中的所有成员。
类成员函数可以在类内部定义,也可以在类外部定义
内部定义
class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度//函数-表行为double getVolume(void){return length * breadth * heigth;}
};
外部定义(使用比较多)
class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度//函数-表行为double getVolume(void);};
//:: 运算符之前必须使用类名
double Box::getVolume(void)
{return length * breadth * heigth;
}
例子
#include <iostream>using namespace std;class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度//函数-表行为double getVolume(void);void setLength(double len);void setBreadth(double bre);void setHeight(double hei);};
//:: 运算符之前必须使用类名
double Box::getVolume(void)
{return length * breadth * heigth;
}void Box::setLength(double len)
{length = len;
}void Box::setBreadth(double bre)
{breadth = bre;
}void Box::setHeight(double hei)
{heigth = hei;
}int main()
{double volume = 0.0;//用于存储体积Box *youbox = new Box;//在堆中定义对象youboxyoubox->setLength(6.0);youbox->setHeight(7.0);youbox->setBreadth(8.0);volume = youbox->getVolume();cout << "youbox的体积: " << volume << endl;delete youbox;//删除对象,释放堆里面的内存return 0;
}
类的访问修饰符
关键字 public、private、protected 称为访问修饰符。
class Base {public:// 公有成员//公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值protected:// 受保护成员//私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。private:// 私有成员//protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。
};
类的构造函数和析构函数
构造函数
类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行。
构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void。构造函数可用于为某些成员变量设置初始值。
构造函数:假如我们定义了构造函数,就会触发这个构造函数。
构造函数也可以进行重载。
#include <iostream>using namespace std;class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度Box()//构造函数(没有带参数){length = 1;breadth = 1;heigth = 1;}Box(int a)//带参数的构造函数(重载){length = 2;breadth = 2;heigth = 2;}//函数-表行为double getVolume(void);void setLength(double len);void setBreadth(double bre);void setHeight(double hei);};
//:: 运算符之前必须使用类名
double Box::getVolume(void)
{return length * breadth * heigth;
}void Box::setLength(double len)
{length = len;
}void Box::setBreadth(double bre)
{breadth = bre;
}void Box::setHeight(double hei)
{heigth = hei;
}int main()
{double volume = 0.0;//用于存储体积// Box *youbox = new Box;//在堆中定义对象youbox//想要初始化时使用带参数的构造函数时int a;Box *youbox = new Box(a);//在堆中定义对象youboxvolume = youbox->getVolume();//使用的默认值cout << "youbox的体积: " << volume << endl;youbox->setLength(6.0);youbox->setHeight(7.0);youbox->setBreadth(8.0);volume = youbox->getVolume();cout << "youbox的体积: " << volume << endl;delete youbox;//删除对象,释放堆里面的内存return 0;
}
初始化的另一种方式
析构函数
析构函数:假如我们定义了析构函数,当对象被删除或者生命周期结束的时候,就会
触发析构函数。
类的析构函数是类的一种特殊的成员函数,它会在每次删除所创建的对象时执行。
析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,它不会返回任何值,也不能带有任何参数。析构函数有助于在跳出程序(比如关闭文件、释放内存等)前释放资源。
class Box
{
public://确定类成员的访问属性double length;//长double breadth;//宽度double heigth;//高度Box()//构造函数(没有带参数){length = 1;breadth = 1;heigth = 1;}Box(int a)//带参数的构造函数(重载){length = 2;breadth = 2;heigth = 2;}~Box()//析构函数{cout<<"Box is end"<<endl;}//函数-表行为double getVolume(void);void setLength(double len);void setBreadth(double bre);void setHeight(double hei);};
继承
继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。
当创建一个类时,您不需要重新编写新的数据成员和成员函数,只需指定新建的类继承了一个已有的类的成员即可。这个已有的类称为基类,新建的类称为派生类。
类的继承允许我们在新的类里面继承父类的public还有protected部分,private是不能被继承的。
当我们觉得这个类不好的时候,可以使用类的继承,添加我们需要的功能。
// 基类
class Animal {// eat() 函数// sleep() 函数
};//派生类
class Dog : public Animal {// bark() 函数
};
#include <iostream>using namespace std;//基类Shape(范围很大,描述模糊)
class Shape
{
public://接口函数void setwidth(int w){width = w;}void setHeight(int h){height = h;}
public://构造函数Shape() {}
protected:int width;int height;
};//基类 PaintCost
class PaintCost
{
public:int getCost(int area){return area*70;}//构造函数
public:PaintCost() {}
};//派生类
class Rectangle: public Shape,public PaintCost
{
public:int getArea(){return (width*height);}
};
int main()
{Rectangle *Rect = new Rectangle;int area;Rect->setwidth(5);Rect->setHeight(7);area = Rect->getArea();//输出对象的面积cout << "Total area:"<<Rect->getArea() << endl;//输出总花费cout<<"Total paint const: $"<<Rect->getCost(area)<<endl;return 0;
}
虚函数和纯虚函数
用virtual来修饰,虚函数是用在类的继承上的。
可以预留接口,实现分工合作。