夯实基础_C++_Day-2
本帖最后由 rain-xuan 于 2021-7-24 12:01 编辑# Day_2
------
## using的声明和编译指令(重点)
------
### using的声明可以让命名空间中的某个标识符可以直接使用
```
namespace A{
int a=10,b,c;
}
test_1()
{
using A::a; //从这一行开始以后标识符a都是A作用域中的a
cout << a << endl;
int a=20; //这是会报错的,重定义的错误,using的声明相当于局部变量,不可在局部作用域下重定义
}
```
------
### using的编译指令让命名空间中的标识符都可以直接使用
```
namespace A{
int a=10,b=20,c=30;
}
test2(){
using namespace A;
cout << a << endl;
cout << b << endl;
cout << c << endl;
int a=50; //正确,因为这时的命名空间的a相当于全局变量,这里的a是局部变量,不影响就近原则
cout << a << endl; //a的值为50,就近原则
}
```
------
## `struct`类型的加强(重点)
------
* C语言定义了结构体之后,定义变量时还要加`struct`关键字,但是C++不用
* C语言的结构体只能定义成员,但是C++既可以定义成员,又可以定义方法
------
```
struct node1{
int a = 0;
char name;
};
test_1(){
node1 Node; //强化一
}
```
------
```
struct node2{
int b = 10;
void func()
{
cout << "func" << endl;
}
};
test_2(){
node2 Node_2;
Node_2.func();
}
```
------
## 更加严格的类型检查(了解)
```
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* p = malloc(64); //隐式声明转换
return 0;
}
```
------
```
#include <iostream>
using namespace std;
int main()
{
//char* p = malloc(64); //会报错 void*
char* p = (char*)malloc(64); //不可以隐式声明,必须显示转换
return 0;
}
```
------
## 三目运算符(了解)
------
* c语言三目运算符返回的是右值
* c++语言三目运算符返回的是左值
* 在赋值操作符左边的为左值,右边的为右值(存疑,待完善)
------
```
test_1(){
int a = 10;
int b = 20;
printf("%d\n",a>b?a:b);//打印a、b中较大的值
(a>b?a:b) = 100; //err 等价于 20 = 100
//正确操作
*(a>b?&a:&b) = 100; //取a、b的地址,然后解引用,相当于给两者较大的变量符值
printf("a=%d,b=%d",a,b); //a = 10 , b = 100
}
```
------
```
test_2(){
int a = 10;
int b = 20;
(a>b?a:b) = 100;
cout << "a=" << a <<" " << "b = " << b << endl; //a = 10 , b = 100;
}
```
c++技巧性东西太多,做同一件事,多种方法,导致难度太大 java天下第一! czzzz 发表于 2021-7-23 21:45
java天下第一!
Java是c\c++写的,亲, 谢谢楼主分享! bsjasdq 发表于 2021-7-23 21:51
Java是c\c++写的,亲,
头一次看见负的吾爱币! 对于c++l来说,难度高是名声在外 感谢 分享,收藏备用,养肥了再来。 厉害厉害
页:
[1]
2