类中的构造函数的基本内容
文章转载至:
http://blog.bools.cn/archives/1497
一、面向对象实例,计算立方体的面积,体积(作业)
#include<iostream>
using namespace std;
class Cude
{
public:
void setL(int l)//设置长
{
L = l;
}
void setW(int w)//设置宽
{
W = w;
}
void setH(int h)//设置高
{
H = h;
}
void area()//计算面积
{
int s = L * W * 2 + L * H * 2 + H * W * 2;
cout << "立方体面积是:" << s << endl;
}
void volume()//计算体积
{
int v = H * L * W;
cout << "立方体的体积:" << v << endl;
}
private:
int L;
int W;
int H;
};
void test01()
{
Cude c1;
c1.setL(10);
c1.setH(10);
c1.setW(10);
c1.area();
c1.volume();
}
int main()
{
test01();
system("pause");
return 0;
}
二、多类时的多文件编写
作用:
当建立得类比较多时,就要用到分文件去编写类
方法:
一个类需要占据一个头文件和一个源文件,在头文件里面进行累的声明。在源文件里面进行函数的实现(记住在源文件里面要注明作用域)
三、对象的初始化和清理
定义:
初始化和清理是我们使用变量或者对象时候必不可少的一步,在编写代码的时候,我们不用主动的去写清理代码,因为系统会主动提供这种问题的解决方案,就是构造函数和析构函数,这两个函数会被编译器自动调用,完成对象的初始化和清理工作。
1、构造函数
没有返回值,不用写void,与类名相同,可以发生重载
class Person
{
public:
Person()//构造函数
{
}
}
2、析构函数
没有返回值,没有void,与类名相同,类名前加~,不可以发生重载
lass Person
{
public:
~Person()//析构函数
{
}
}
四、构造函数
分类:安参数分为有参构造参数和无参构造参数。按照类型分为普通构造函数和拷贝构造函数。
实例:
class Person
{
public:
//构造函数分类:无参构造,有参构造,普通参数构造,拷贝参数构造
Person()//无参构造
{
cout << "无参数构造" << endl;
}
Person(int a)//有参构造
{
cout << "有参数构造" << endl;
}
Person(const Person& p)//拷贝构造
{
cout << "拷贝构造" << endl;
}
~Person()//析构函数
{
cout << "析构函数" << endl;
}
};
**注意:**拷贝构造函数的表示规则 Person(const Person& p)
五、构造函数的调用
分为括号法和显示法
1、括号法
//Person p1;//无参数调用的·时候不可以加(),不然系统会以为这是函数申明。
//Person p2(10);//有参构造的调用
//Person p3(p2);//拷贝构造的调用
**注意:**参数调用的·时候不可以加(),不然系统会以为这是函数申明。
2、显示法
Person p1 = Person(100);
//Person(100)这是匿名对象
Person p2 = Person(p1);
//不能直接用拷贝函数初始化匿名对象 Person(p1);这样的话编译器会把他认成对p1对象的申明。
注意:
Person(100)这是匿名对象,但是不能直接用拷贝函数初始化匿名对象 Person(p1);这样的话编译器会把他认成对p1对象的申明。
六、拷贝构造函数的调用方式
1、利用已知的对象来赋值新的对象(常用)
void test04()
{
//利用已经创建好的对象来初始化新的对象
//Person p1(10);
//p1.m_age = 10;
//Person p2(p1);
}
2、以值传递的方式传递参数
void dowork(Person p1)
{
}
void test04()
{
Person p(10);
dowork(p);
}
//相当与Person p1=Person(p)
七、构造函数的调用规则
1、默认情况下,系统会给我们默认四个函数,默认析构函数,默认无参构造函数,默认有参构造函数,默认拷贝构造函数。
2、如果定义了拷贝构造函数,那么系统将不会默认构造其它函数。
3、如果定义了有参构造函数,那么系统将会默认构造拷贝构造函数,没有无参构造函数。
八、初始化列表的使用
定义:一般情况下,有参构造函数的作用就是为了初始化属性。除此之外,还有一种简易的利用构造函数来初始化属性的方法就是初始化列表。
格式:构造函数+ : +属性(参数)+属性(参数)+…;
实例:
class Person
{
public:
Person (int a,int b,int c):m_age(a),m_bge(b),m_cge(c)
{}//有参构造初始化
Person():m_age(10),m_bge(20),m_cge(30){}//无参构造初始化
int m_age;
int m_bge;
int m_cge;
}
注意:
初始化列表常用的是有参构造函数,因为可以通过参数的不同来改变属性。无参构造函数的属性值是固定的。
九、类对象作为类成员的案例
当类对象作为累的成员时,构造顺序时先构造类对象的构造,然后再构造自己,析构顺序与构造相反。
实例:
#include<iostream>
using namespace std;
class m_Phone
{
public:
m_Phone()
{
cout << "m_Phone无参构造" << endl;
}
~m_Phone() {
cout << "m_Phone的析构构造" << endl;
}
m_Phone(string Phonename) :Phone(Phonename) {}
string Phone;
};
class m_Game
{
public:
m_Game()
{
cout << "m_Game的无参构造" << endl;
}
~m_Game() {
cout << "m_Game的析构构造" << endl;
}
m_Game(string Gamename) :Game(Gamename) {}
string Game;
};
class Person
{
public:
Person()
{
cout << "Person无参构造" << endl;
}
Person(string a, string b, string c) :name(a), Phone(b), Game(c)
{
}
~Person() {
cout << "Person的析构构造" << endl;
}
void shixian()
{
cout << name << "拿着" << Phone.Phone <<"手机"<<"刷着"<< Game.Game << endl;
}
string name;
m_Phone Phone;
m_Game Game;
};
void test07()
{
Person p("猪","苹果","快手");
p.shixian();
}
int main()
{
test07();
system("pause");
return 0;
}
十、bool数据类型
定义:bool就是一种普通的数据类型,可以用来修饰变量。起作用就是判断正确true和错误false。
实例:
#include<iostream>
using namespace std;
int main01()
{
bool func = true;
bool fun = false;
cout << func << endl;
cout << fun << endl;
system("pause");
return 0;
}
欢迎关注技术公众号,获取更多软件学习干货