类中的构造函数的基本内容

类中的构造函数的基本内容

文章转载至:
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;
}

欢迎关注技术公众号,获取更多软件学习干货
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我们可以创建一个名为 "Book" 的来表示图书。在这个类中,可以包含以下成员函数和数据成员: - 构造函数: 用于在创建的实例时初始化数据成员。 - 析构函数: 用于在的实例销毁时执行清理工作。 - 复制构造函数: 用于在将一个的实例赋值给另一个实例时进行深拷贝。 - 友元或静态成员: 可以在不创建的实例的情况下访问的成员。 - 静态函数: 不依赖于的实例,可以直接通过名访问的函数。 在这个图书管理系统中,可以设计数据成员来存储图书的信息,如书名、作者、出版社等。然后可以实现成员函数来对图书信息进行操作,如增加、删除、修改等。 下面是一个示例代码: ```C++ #include <iostream> #include <string> using namespace std; class Book { public: // 构造函数: 在创建实例时初始化数据成员 Book(string name, string author, string publisher) : m_name(name), m_author(author), m_publisher(publisher) {} // 析构函数: 在实例销毁时执行清理工作 ~Book() {} // 复制构造函数: 在将一个实例赋值给另一个实 ### 回答2: 图书管理系统是一个用于管理图书馆的软件系统,通过它可以方便地实现对图书的分、借还、查询等功能。我们可以使用C语言知识编写一个简单的图书管理系统。 首先,我们需要创建一个图书,这个应包含以下成员函数和数据成员: 1. 数据成员: - book_name:图书名称 - book_author:图书作者 - book_id:图书编号 - is_borrowed:图书是否被借阅的状态 2. 成员函数: - 构造函数:用于初始化图书对象的数据成员 - 析构函数:用于释放图书对象占用的内存 - 复制构造函数:用于复制一个已有的图书对象 - 友元函数或静态成员:用于在外访问私有数据成员 - 静态函数:用于操作静态数据成员 然后,我们可以根据题目要求设计图书管理系统的主程序。主程序应具备以下功能: 1. 添加图书:通过用户的输入,创建图书对象并添加到系统的图书列表中。 2. 删除图书:根据用户输入的图书编号,从系统的图书列表中删除对应的图书对象。 3. 借阅图书:根据用户输入的图书编号,查找对应的图书对象并将其借阅状态设置为已借阅。 4. 归还图书:根据用户输入的图书编号,查找对应的图书对象并将其借阅状态设置为未借阅。 5. 查询图书:根据用户输入的条件,从系统的图书列表中查询并输出符合条件的图书对象信息。 通过以上功能的实现,我们即可完成一个简单的图书管理系统。当然,这只是一个基本的实现,还可以根据实际需求进行扩展和完善。 ### 回答3: 为了实现一个简单的图书管理系统,我们可以创建一个Book来管理图书的相关信息。以下是一个可能的实现方案: ```c #include <iostream> #include <string> using namespace std; class Book { private: string title; // 书名 string author; // 作者名 string isbn; // ISBN号 public: // 构造函数 Book(string t, string a, string i) { title = t; author = a; isbn = i; } // 复制构造函数 Book(const Book& b) { title = b.title; author = b.author; isbn = b.isbn; } // 析构函数 ~Book() {} // 友元函数(用于访问私有成员变量) friend void displayBookInfo(Book b); // 静态成员 static int count; // 静态函数 static void increaseCount() { count++; } }; // 静态成员变量的初始化 int Book::count = 0; // 友元函数的实现 void displayBookInfo(Book b) { cout << "书名:" << b.title << endl; cout << "作者:" << b.author << endl; cout << "ISBN号:" << b.isbn << endl; } int main() { Book book1("《C++ Primer》", "Stanley B. Lippman, Josée Lajoie, Barbara E. Moo", "978-7111088451"); displayBookInfo(book1); Book book2 = book1; // 测试复制构造函数 displayBookInfo(book2); Book::increaseCount(); // 增加图书计数 cout << "图书总数:" << Book::count << endl; return 0; } ``` 这个程序通过定义一个Book来实现图书管理系统。该包含了构造函数、析构函数、复制构造函数、友元函数和静态函数。通过创建Book对象,并调用友元函数`displayBookInfo`来展示书籍的相关信息。另外,通过静态成员`count`和静态函数`increaseCount`,可以统计图书的总数。在`main`函数中,我们首先创建了一个Book对象`book1`,然后使用`displayBookInfo`函数展示其信息。接着使用复制构造函数创建了另一个Book对象`book2`,再一次调用`displayBookInfo`函数展示其信息。最后,通过静态函数`increaseCount`增加了图书的计数,并输出了图书的总数。 当然,这只是一个简单的图书管理系统的示例,实际对于一个完整的图书管理系统,还需要添加更多的功能和细节。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值