结构体和类非常相似,它们之间除了写法格式上的不同,结构体用的是\(struct\),而类用的是\(class\)定义外,类中还有特定的\(public\)和\(private\),其中,\(public\)为公共数据,可以在类外使用,而\(private\)为类内数据,只能在类内使用。
类内成员函数的定义
方法一
成员函数在类外面
class point { void point::car(int x) { return x*x; } }
即返回值类型 类名::成员函数名(参数表)
{
函数体
}
方法二
成员函数直接定义在类里面
用法和结构体一样,不多解释了
方法三
使用内联成员函数,关键字\(inline\)
和结构体一样,不多$\LARGE{bb}$了
对象的初始化不能直接像结构体一样直接套等于,要用到构造函数,构造函数名和类名一样,一般对私有成员赋初值,形式一般有如下两种。
第一种
类名 对象名[(实参表)]
class Complex { private: int a; int b; public: Complex(int c,int d) { a=c; b=d; } int car() { return a+b; } } int main() { Complex A(1,2);//定义对象A时调用了构造函数Complex //分别对a和b赋初值1和2 cout<<A.car()<<endl; return 0; }
第二种
类名*指针变量名=new类名[(实参表)]
例如:Complex *pa=new Complex(1,2);
输出时调用pa->car()
同时也可以用delete释放
例如:delete pa;
\(tip:\)
1、构造函数名和类名要一样。
2、没有返回值
3、写在类里面外面都可以
4、构造函数可以不带参数
语法格式如下:
类名::构造函数名([参数表])[:(成员初始化列表)]
{
//构造函数体
}
成员初始化列表的一般形式语言为:
数据成员名1(初始值1),数据成员名2(初始值2),······
例如:
Complex::Complex(int c,int d):a(c),b(d) { //使用成员初始化列表对数据成员初始化 }
用法参考函数的重载,也不多bb了
emm好像也没啥好说的
语法如下:
~Complex();//声明析构函数 ······ Complex::~Complex()//定义析构函数 { //函数部分 }
也可直接显式定义,如下:
~Complex()//定义析构函数 { //函数部分 }
这点也和结构体类似\(qwq\)
\(tips:\)
1、析构函数名和类名一样
2、无返回值
3、无参数
4、撤销对象时,会自动调用析构函数(如主函数结束return 0时会调用析构函数)