c++從入門到精通——Hello World書寫
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
system("pause");
return EXIT_SUCCESS;
}
在線運行工具。
面向對象三大特性
面向對象三大特性
封裝
把客觀事物封裝成抽象的類,並且類可以把自己的數據和方法只讓可信的類或者對象操作,對不可信的進行信息隱藏。
類將成員變量和成員函數封裝在類的內部,根據需要設置訪問權限,通過成員函數管理內部狀態。
繼承
繼承所表達的是類之間相關的關係,這種關係使得對象可以繼承另外一類對象的特徵和能力。
繼承的作用:避免公用代碼的重複開發,減少代碼和數據冗餘。
多態
多態性可以簡單地概括爲“一個接口,多種方法”,字面意思爲多種形態。程序在運行時才決定調用的函數,它是面向對象編程領域的核心概念。
雙冒號作用域運算符
通常情況下,如果有兩個同名變量,一個是全局變量,另一個是局部變量,那麼局部變量在其作用域內具有較高的優先權,它將屏蔽全局變量。
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
int atk = 200;
void test01()
{
int atk = 100;
cout << "攻擊力爲 : " << atk << endl;
//雙冒號 作用域運算符 ::全局作用域
cout << "全局攻擊力爲 : " << ::atk << endl;
}
int main(){
test01();
system("pause");
return EXIT_SUCCESS;
}
運行
攻擊力爲 : 100
全局攻擊力爲 : 200
sh: 1: pause: not found
命名空間
定義命名空間
命名空間的定義使用關鍵字 namespace,後跟命名空間的名稱,如下所示:
namespace namespace_name {
// 代碼聲明
}
爲了調用帶有命名空間的函數或變量,需要在前面加上命名空間的名稱,如下所示:
name::code; // code 可以是變量或函數
創建一個命名空間
code爲函數的情況
#include <iostream>
using namespace std;
// 第一個命名空間
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// 第二個命名空間
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
int main ()
{
// 調用第一個命名空間中的函數
first_space::func();
// 調用第二個命名空間中的函數
second_space::func();
return 0;
}
code爲變量的情況
namespace A{
int a = 10;
}
namespace B{
int a = 20;
}
void test(){
cout << "A::a : " << A::a << endl;
cout << "B::a : " << B::a << endl;
}
命名空間可嵌套命名空間
namespace A{
int a = 10;
namespace B{
int a = 20;
}
}
void test(){
cout << "A::a : " << A::a << endl;
cout << "A::B::a : " << A::B::a << endl;
}
命名空間是開放的,即可以隨時把新的成員加入已有的命名空間中
namespace A{
int a = 10;
}
namespace A{
void func(){
cout << "hello namespace!" << endl;
}
}
void test(){
cout << "A::a : " << A::a << endl;
A::func();
}
聲明和實現可分離
聲明
#pragma once
namespace MySpace{
void func1();
void func2(int param);
}
實現
void MySpace::func1(){
cout << "MySpace::func1" << endl;
}
void MySpace::func2(int param){
cout << "MySpace::func2 : " << param << endl;
}
無名命名空間,意味着命名空間中的標識符只能在本文件內訪問,相當於給這個標識符加上了static,使得其可以作爲內部連接
namespace{
int a = 10;
void func(){ cout << "hello namespace" << endl; }
}
void test(){
cout << "a : " << a << endl;
func();
}
命名空間別名
namespace veryLongName{
int a = 10;
void func(){ cout << "hello namespace" << endl; }
}
void test(){
namespace shortName = veryLongName;
cout << "veryLongName::a : " << shortName::a << endl;
veryLongName::func();
shortName::func();
}