构造和析构在主函数和子函数的不同

构造和析构在主函数和子函数中的不同

今天学习构造和析构时发现了很有意思的现象,在子函数中创建对象,输出显示构造和析构都调用了,但是主函数中创建的对象在编译时,只显示构造函数调用了。刚开始,我还以为主函数和子函数中的局部变量存储位置不同,其实不是的。两者局部变量均存放在栈区,程序结束后便会释放。

class Person
{
public:
	Person()
	{
		cout << "构造函数的调用" << endl;
	}
	~Person()
	{
		cout << "析构函数的调用" << endl;
	}

};
void test01()
{
	Person p; //栈上的数据,test01结束后这个对象所占内存就释放。所以调用完构造后,立马调用了析构
	cout << "111" << endl;
}
int main()
{
	Person p;
	test01();
	system("pause");
	return 0;
}

运行结果
1、先说子函数:创建p对象时,进行了构造函数,然后并不是在这句话执行完毕后就释放对象,而是先输出了“111”,最后在程序结束之前调用了析构函数。
2、主函数中:创建对象p时调用了构造函数进行初始化操作,然后进行到了system(“pause”)[按任意键继续],最后在return 0;之前【即关闭编译界面前】,调用了析构函数,然后主函数运行结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
解题思路: 1. 首先定义一个书类(Book),包含书名、单价、出版社等数据成员,这些数据成员都应该设置为私有的。 2. 定义构造函数析构函数构造函数可以重载或默认值,允许创建对象时可传参也可不传参,析构函数用于释放对象占用的内存。 3. 定义其他成员函数,比如修改对应数据,输出对应数据等,尽可能丰富类的功能。 4. 定义一个求和函数,计算3本书之和。 5. 在主函数中创建对象,测试类的成员函数、求和函数功能。 粘贴运行结果: 书名:《C++ Primer》 单价:99.9 出版社:人民邮电出版社 书名:《Effective C++》 单价:88.8 出版社:机械工业出版社 书名:《STL源码剖析》 单价:66.6 出版社:电子工业出版社 3本书的总价为:255.3 代码(带适当注释): #include <iostream> #include <cstring> using namespace std; class Book { private: string name; // 书名 double price; // 单价 string publisher; // 出版社 public: // 构造函数 Book(string n = "", double p = 0.0, string pub = "") { name = n; price = p; publisher = pub; } // 析构函数 ~Book() {} // 修改书名 void setName(string n) { name = n; } // 修改单价 void setPrice(double p) { price = p; } // 修改出版社 void setPublisher(string pub) { publisher = pub; } // 输出书名 string getName() { return name; } // 输出单价 double getPrice() { return price; } // 输出出版社 string getPublisher() { return publisher; } // 求和函数,计算3本书之和 static double sum(Book b1, Book b2, Book b3) { return b1.getPrice() + b2.getPrice() + b3.getPrice(); } }; int main() { // 创建3本书的对象 Book book1("C++ Primer", 99.9, "人民邮电出版社"); Book book2("Effective C++", 88.8, "机械工业出版社"); Book book3("STL源码剖析", 66.6, "电子工业出版社"); // 输出3本书的信息 cout << "书名:" << book1.getName() << endl; cout << "单价:" << book1.getPrice() << endl; cout << "出版社:" << book1.getPublisher() << endl << endl; cout << "书名:" << book2.getName() << endl; cout << "单价:" << book2.getPrice() << endl; cout << "出版社:" << book2.getPublisher() << endl << endl; cout << "书名:" << book3.getName() << endl; cout << "单价:" << book3.getPrice() << endl; cout << "出版社:" << book3.getPublisher() << endl << endl; // 计算3本书的总价 double total = Book::sum(book1, book2, book3); cout << "3本书的总价为:" << total << endl; return 0; } 分析总结: 本题主要考察了面向对象编程的基本概念和语法,包括类的定义、构造函数析构函数、成员函数、静态函数等。同时,还考察了字符串类型的使用和静态成员函数的定义和使用。在实现过程中,需要注意数据成员的访问权限,以及如何在类的外部访问私有成员。此外,还需要注意对象的创建和销毁,以及如何使用静态函数计算3本书的总价。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值