C++学习(一)——基础(一)

上一周把C语言简单的复习了一下子,收获还是蛮大的,但C语言中还有许多问题,希望在以后的练习中能够得到强化,从这周就开始了对C++语言的学习。

一、概述

1、C++简介

1.C++语言可以认为是对C语言的扩展,因此C++可以说是C语言的超集,这意味着任何有效的C语言程序都是C++程序。C++程序可以使用原有的C语言库。

2.C++语言在C语言的基础上添加了面向对象编程和泛型编程的支持。C++语言继承了C语言 高效,简洁,快速和可移值的传统。

3.C++语言融合了3种不同的编程方式:

  • C语言代表的过程性语言
  • C++在C语言的基础上添加的类代表的面向对象语言
  • C++模板支持的泛型编程

C++与C语言的关系

  • C++是C语言的加强,是一种更好的C语言
  • C++是以C语言为基础的,并且完全兼容C语言的特性

2、简单的C++程序

#include<iostream>// 使用标准输入输出流 i:input o:output 相当于 stdio.h

using namespace std; //使用标准命名空间 

int main() //程序入口函数
{
	//  cout 输出流对象 向屏幕中输出内容
	//  << 在C++中有新的意义 
	//  endl 结束输入并换行

	cout << "hello,world" << endl; 

	system("pause"); //暂停
	return 0;
}

3、面向过程和面向对象

面向过程

  • 面向过程是一种以过程为中心的编程思想
  • 通过分析出解决问题所需要的步骤,然后用函数把这些步骤一个一个实现,使用的时候一个一个一次调用就好了
  • 面向过程编程思想的核心:功能分解,自顶向下,逐层细化(程序=数据结构+算法)
  • 面向过程编程语言存在的主要缺点是不符合人的思维习惯,而是要用计算机的思维方式去处理问题,而且面向过程编程语言重用性低,维护困难

面向对象

  • 在面向对象中,算法与数据结构被称作一个整体,称作对象,现实世界中任何类的对象都有一定的属性和操作,也总能用数据结构与算法两者合一地来描述,所以可以用下面的等式来定义对象和程序:
    对象 = 算法 + 数据结构
    程序 = 对象 + 对象 + 对象 …

  • 面向对象编程思想核心
    应对变化,提高复用

  • 面向对象三大特性
    封装 继承 多态

C++对C语言的扩展

1、双冒号作用运算符

  • ::如果前面没有任何作用域,就代表了使用全局作用域
#include<iostream>

using namespace std;

int a = 10;

void f()
{
	int a = 20;
	cout << a << endl;
	cout << ::a << endl;
}

int main()
{
	f();
	system("pause");
	return 0;
}

2、命名空间

  • 用途:解决命名冲突的问题
  • 命名空间下,可以存放变量、函数、结构体、类…
  • 命名空间必须声明在全局作用域下
  • 命名空间可以嵌套命名空间
  • 命名空间是开放的,可以随时向命名空间下添加新的成员
  • 命名空间是可以匿名的
  • 命名空间是可以起别名的
1.cpp
#include<iostream>
#include "1.h"
#include "2.h"
using namespace std;

void test1()
{
	a::f();
	b::f();
}


// 命名空间下,可以存放变量、函数、结构体、类......
namespace c
{
	int a = 10;
	void f1();
	struct Teacher
	{
		int age;
	};
	class Circle
	{
	public:
		int r;

	};

}

// 命名空间必须声明在全局作用域下
// 命名空间可以嵌套命名空间
namespace d
{
	int a = 10;
	namespace e
	{
		int a = 20;
	}
}
//命名空间是开放的,可以随时向命名空间下添加新的成员
namespace d
{
	int b = 20;
}


// 命名空间是可以匿名的
namespace
{
	int m_c = 10;
	// 相当于在变量前加了一个关键字 static
	// static int c = 10;
}

// 命名空间是可以起别名的
namespace longname
{
	int m_d = 10;
}

void test5()
{
	namespace shortname = longname;
	cout << "long :" << longname::m_d << endl;
	cout << "short :" << shortname::m_d << endl;
}
void test2()
{
	cout << "d: a = " << d::a << endl;
	cout << "e: a = " << d::e::a << endl;
}

void test3()
{
	cout << "d: a = " << d::a << endl;
	cout << "d: b = " << d::b << endl;
}

void test4()
{
	cout << "m_c = " << m_c << endl;
}

int main()
{
	// test1(); //   解决命名冲突的问题
	/*namespace c {

	}*/
	// test2(); // 命名空间可以嵌套命名空间
	// test3();
	// test4();
	test5();
	system("pause");
	return 0;
}
2.cpp
#include "1.h"

void a::f()
{
	cout << "aaaaaaa" << endl;
}
3.cpp
#include "2.h"

void b::f()
{
	cout << "bbbbbbb" << endl;
}
1.h
#pragma once
#include<iostream>

using namespace std;


namespace a
{
	void f();
}
2.h
#include<iostream>

using namespace std;

namespace b
{
	void f();
}

3、using声明和using编译指令

#include<iostream>

using namespace std;

namespace a
{
	int a_a = 10;
}

namespace b
{
	int a_a = 10;
}

void test1()
{
	// int a_a =20;
	using a::a_a; // using声明 当就近原则和using声明同时出现的时候,需要避免二义性
	cout << "a::a_a = " << a_a << endl;
 }

void test2()
{
	//int a_a = 20;
	// using 编译指令
	using namespace a;
	using namespace b;
	cout << "a::a_a = " << a::a_a << endl;
	// 如果有就近原则出现,优先使用仅仅原则
	// 如果using编译指令存在多个并且有同名出现,需要加作用域区分
}
int main()
{
	//test1();
	test2();
	system("pause");
	return 0;
}
发布了31 篇原创文章 · 获赞 8 · 访问量 3678

猜你喜欢

转载自blog.csdn.net/qq_42689353/article/details/104446043