初识c++

发布时间:2024年01月17日


? C++与C语言完全兼容,C语言的绝大部分内容可以直接用于C++的程序设计,用C语言编写的程序可以不加修改地用于C++,c++用有c的特性,并在c基础上拥有了封装,继承,多态,类,对象的新特性。

1.helloWorld

//头文件 g++ my.cpp g++ my.c 以.c .cc .cpp后缀为结尾的c++文件都使用 g++编译
include <iostream>
//命名空间
using namespace std;
int main(){
    //打印语句
	cout <<"hello wolrd\n";
    return 0;
}
1.编译步骤
	预处理: g++ -E 
	编译:   g++ -S 
	汇编:	  g++ -c
	链接:   g++ *.o

2.引用数据类型

2.1变量的引用

int a=10;
int &b=a;
printf(%d %d,a,b)

2.2使用引用数据类型作为参数交换两个数的值

void exchange(int &a, int &b)//引用传参
		{
			a = a ^ b;
			b = a ^ b;
			a = a ^ b;
		
		}
int main()
{
    int m = 10;
    int n = 20;	
    exchange(m,n);
    return 0;
}

3.函数重载

概念,函数名相同,函数的参数和个数不同就叫函数的重载;
/*===============================================
*   文件名称:overLoad.c
*   创 建 者:     
*   创建日期:2024年01月15日
*   描    述:函数重载:
*               函数名相同,函数参数个数和类型不同
================================================*/
#include <stdio.h>

int add(int a){
    return a+a;
}
//函数名相同,函数参数个数不同
int add(int a,int b){
    return a+b;
}
int add(int a,int b,int c){
    return a+b+c;
}
// 函数名相同类型不同
char add(char a){
    return a+'b';
}
int main(int argc, char *argv[])
{ 
    char a=1;
    printf("%d\n",add(10));
    printf("%d\n",add(10,20));
    printf("%d\n",add(10,20,30));
    printf("%d\n",add('2');
    //printf("%d\n",add(1));
    
    return 0;
}

4.命名空间

用于管理函数名、变量名及类。

4.1变量

语法:
namespace A{
	int i=10;
}
调用:
    方式一
    A::i;
printf("%d\n",A::i);
	方式二:
     	using namespace A;
		printf("%d\n",i);

4.2函数

语法:
namespace A{
	void print(){
        printf("hello wolrd\n");
        
    }
}
调用:
    A::print();
方式二:
     	using namespace A;
		print();

4.3类

5.结构体

5.1语法

/*===============================================
*   文件名称:struct.cpp
*   创 建 者:     
*   创建日期:2024年01月15日
*   描    述:
================================================*/
#include <iostream>
using namespace std;
struct stu{
    int age=18;
    void setAge(int val);
    //类型可以是函数
    int getAge(){
        return this -> age;
    }
};
//::作用域访问符
//结构体外部定义成员函数
void stu::setAge(int val){
    this->age=val;
}
int main(){
    struct stu s;
    //打印结构体成员变量
    cout << s.age << endl;
    s.setAge(20);
    cout << s.getAge() << endl;
    return 0;
}

6.内存模型

1.变量的作用域
	1)局部域
		void fun()
		{
			int i = 123;//局部变量
		}
	2)全局域
		int a = 0;//全局域
		int main()
		{
	
		}
	3)函数原型作用域
		void fun(int a);//a:函数原型作用域
	4)名字空间域
		namespace A{
			int i = 321;//名字空间域
			void prnmsg()//名字空间域
			{
				cout << "i=" << i << endl;
			}
		}
	5)类域
		class Demo{
		public:
			void setval(int v)//类域
			{
				val = v;
			}
		private:
			int val;//类域
		
		};
2.函数的作用域
	可以是类域,也可以是全局域,还可以是名字空间域,但是不能为局部域
3.链接性(linkage)
	描述了名称如何在各个单元中的共享。
	1)外部链接:是指名称可以在文件间共享 例如:全局变量和全局函数是外部链接
	2)内部链接:名称仅仅能在一个文件中的函数共享 例如:static的全局变量和static的全局函数是内部链接
4.变量的链接性和存储性
	存储类型               作用域    链接性
	  auto				  模块内     空
	  register            模块内     空           
      extern              文件       外部
      static全局			 本文件     内部
      static局部			 模块内     空
5.函数的链接性
	内部链接:static函数
	外部链接:全局函数

6.语言链接性(在c++文件中使用c文件中的函数)

在这里插入图片描述

7.动态内存

1.new/delete
    //变量
	eg1:
		int *p = new int;//在堆区给int变量申请空间
		*p = 123;
		delete p;//释放堆区空间
	//结构体
	eg2:
		struct test{
		
		};
		struct test *p  = new struct test;
		delete p;

2.new [] /delete []
    //数组
	eg:
		char *p = new char [16];//在堆区申请 char [16]的空间
		strcpy(p,"hello world");
		delete [] p;//释放堆区空间
文章来源:https://blog.csdn.net/weixin_45594288/article/details/135606849
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。