程序员成长之旅——C++面向对象

程序员成长之旅——C++面向对象


描述面向对象技术的基本概念
面向对象是指按人们认识的客观世界的系统思维方式,采用基于对象(实体)的概念建立模型,模拟客观世界分析、设计、实现软件的方法,包括类、对象、消息以及类的特性等方面的内容。
class和struct的区别
(1)C语言的struct和C++的class的区别:struct只是作为一种复杂的数据类型定义,不能用于面向对象编程。(也就是struct只能定义成员变量不能定义成员函数)
(2)C++中的struct和class的区别:对于成员访问权限以及继承方式,class默认是private的,而struct默认是public的。class还可以用于表示模板类型,struct则不行。
C++类的声明
在调用不带参数的构造函数的时候不需要加小括号。
类成员的初始化
初始化列表的初始化顺序和变量声明的顺序一致。
与全局对象相比,使用静态数据成员有什么优势
(1)静态数据成员没有进入程序的全局名字空间,因此不存在程序中其他全局名字冲突的可能性。
(2)使用静态数据成员可以隐藏信息。因为静态成员可以是private成员,而全局对象不能。
什么情况只能用初始化列表,而不能用赋值
(1)对于const类型成员变量,由于不能被赋值,因此只能用初始化列表。
(2)类的构造函数需要调用基类的构造函数的时候。
main函数执行前还会执行什么代码?

#include<iostream>
using namespace std;

class Test
{
public:
	Test()//构造函数
	{
		cout << "constructor of test" << endl;
	}
};
Test a; //全局变量
int main()
{
	cout << "main() start" << endl;
	Test b; //局部变量
	return 0;
}

程序的输出结果

constructor of Test
main() start
constructor of Test

可看出来,全局对象的构造函数在main函数之前执行。
C++中空类默认会产生哪些类成员函数
C++的空类中,默认会产生默认构造函数、析构函数、拷贝构造函数、赋值函数、取值运算。
构造函数和析构函数是否可以被重载
构造函数可以,因为构造函数可以有多个,带参数;
析构函数不可以被重载,因为析构函数只能有一个,且不能带参数。
C++中虚析构函数的作用是什么
防止基类的指针new一个派生类的对象的时候,析构基类的指针的时候只进行基类的析构函数调用,而不调用派生类的析构函数,从而造成内存泄漏,因此只要有一个类被用来作为基类的时候,就会将其写成虚函数。
拷贝构造函数是什么?什么是深拷贝什么是浅拷贝
拷贝构造函数时一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其它对象的构件及初始化。
浅拷贝是指让新旧两个对象指向同一个外部的内容,而深拷贝是指为新对象制作了外部对象的独立赋值。
编译器和默认的拷贝构造函数
如果用户没有自定义拷贝构造函数,并且在代码中使用到了它,那么编译器就会生成默认的拷贝构造函数;但如果用户定义了拷贝构造函数,那么编译器就不会生成拷贝构造函数;
反正记住一点,只要代码中用到了,用户没有自定义拷贝构造函数,都会生成默认的拷贝构造函数。
拷贝构造函数和赋值函数有什么区别?
最大的区别就是拷贝构造函数是通过已初始化的对象去初始化未初始化的对象,

class A
A a;
A b = a;
A b(a);

而赋值函数是用以初始化的对象去覆盖也以及初始化的对象。

class A;
A a;
A b;
a = b;

编写类string的构造函数、析构函数和赋值函数

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
//深拷贝
namespace lpf
{
	class String
	{
	public:
		String(const char* s = "")
		{
			if (nullptr == s)
				s = " ";

			_str = new char[strlen(s) + 1];
			strcpy(_str, s);
		}
		String(const String& s)
			:_str(new char[strlen(s._str) + 1])
		{
			strcpy(_str, s._str);
		}
		String& operator=(const String& s)
		{
			String strTemp(s._str);
			swap(_str, strTemp._str);
			return *this;
		}
		~String()
		{
			if (_str)
			{
				delete[] _str;
				_str = nullptr;
			}
		}
	private:
		char* _str;
	};
}

int main()
{
	lpf::String s1("hello");
	lpf::String s2(s1);
	lpf::String s3;
	s3 = s1;
	return 0;
}

什么是临时对象?临时对象在什么时候产生
首先我们要清楚,临时对象和局部变量是完全不同的两种概念,简单的说。临时对象,是在做参数和返回值的时候,通过值传递产生的,一般我们可以用引用解决这个问题。
为什么C语言不支持函数重载而C++能支持
首先要清楚函数重载的意思就是函数名相同,但是参数不同的同类函数,和返回值相不相同没有关系。
而C++支持函数重载的最大原因就是编译器对其重载函数进行了处理,它包含了原函数名,参数类型,返回类型的信息,这样就可以区分它们,而C没有进行编译器符号的处理,只是通过函数名区分,因此C不可以。
重载和重写(覆写)有什么区别
1.重载是函数名相同,参数不同,返回值不限制的一类函数;而重写是首先是虚函数或者抽象方法才可以重写,函数名,参数,返回值均相同的一类函数。
2.重载是一种语法规则,它是在编译阶段完成,不属于面向对象的编程,而重写是由运行阶段决定的,是面向对象编程的重要特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。
### 回答1: 《C++面向对象高效编程 第2版》是一本关于C++编程的书籍。本书主要介绍了面向对象编程的概念、原则和技巧,以及如何利用C++语言进行高效的面向对象编程。 在书中,作者详细讲解了C++面向对象特性,包括封装、继承和多态等。同时,还介绍了C++中的其他重要特性,如模板、异常处理和STL库等。这些知识点的讲解结合了大量的例子和实践,使读者能够更好地理解和应用这些概念。 本书在第2版中进行了更新和扩充,添加了新的内容,涉及了现代C++的一些特性和技术,如智能指针、移动语义和并发编程等。这些新的内容可以帮助读者更好地应对现代软件开发的需求和挑战。 与此同时,本书还提供了大量的编程实践和案例,帮助读者掌握实际的编程技巧和经验。通过这些实践,读者可以学习到如何编写高效、可复用和易于维护的C++代码。 总之,《C++面向对象高效编程 第2版》是一本适合C++初学者和有一定经验的程序员阅读的书籍。它不仅介绍了面向对象编程的基本概念和技巧,还提供了大量的实例和编程实践,帮助读者掌握C++语言的高效应用。无论是想深入学习C++面向对象编程的基础知识,还是想了解C++中一些高级特性的使用,这本书都是一本值得推荐的参考书。 ### 回答2: 《C++面向对象高效编程 第2版》是一本关于C++面向对象编程的经典教材。本书的PDF版本可以在网络上进行搜索和获取。该书全面介绍了对象、类、继承、多态等C++面向对象编程的基础知识,同时还深入讲解了C++的高效编程技巧和最佳实践。 在本书中,作者详细解析了C++的语法和特性,并提供了大量的示例代码和演示,以帮助读者更好地理解和掌握面向对象编程的概念和技术。此外,本书还介绍了一些高级主题,如异常处理、模板编程、STL等,在帮助读者提高编程能力的同时,也为读者拓宽了编程思维。 通过学习《C++面向对象高效编程 第2版》PDF版,读者可以系统地学习C++面向对象编程的知识,深入理解面向对象编程的原理和思想,并能够灵活运用这些知识进行开发和设计。同时,本书还提供了一些经验和技巧,帮助读者编写出高效、可维护的C++代码。 总而言之,该书是一本重要的学习资料,不仅适合初学者入门,也适合有一定C++编程基础的开发者进一步提升自己的编程水平。通过阅读《C++面向对象高效编程 第2版》PDF版,读者将能够系统学习C++面向对象编程,并在实际开发中运用所学知识,提升自己的编程能力。 ### 回答3: 《面向对象高效编程 第2版》是一本关于面向对象编程的书籍,主要介绍了面向对象编程的原理、思想和最佳实践。 在这本书中,作者首先介绍了面向对象编程的基本概念,包括类、对象、继承、多态等。然后,作者详细介绍了如何有效地使用面向对象编程进行软件开发。他提出了一些实用的技巧和方法,帮助读者更好地理解和应用面向对象编程的思想。 除了介绍基本的面向对象编程理论外,这本书还提供了大量的案例和示例代码,帮助读者实际运用所学知识解决实际问题。这些案例涵盖了不同领域的应用,包括图形界面、网络编程、数据库操作等,让读者能够从不同角度了解面向对象编程的实际应用场景。 此外,这本书还介绍了一些常用的面向对象编程语言,如Java、C++和Python等。作者通过比较不同的编程语言特点和应用场景,帮助读者选择合适的编程语言,并指导读者如何在具体的编程语言中高效地实践面向对象编程。 总之,《面向对象高效编程 第2版》是一本很好的面向对象编程学习资料。无论是初学者还是有一定经验的开发者,都能从中获取到宝贵的学习经验和实践技巧。通过阅读这本书,读者能够对面向对象编程有更深入的理解,提升自己在软件开发中的能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从零出发——

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值