C++_class_powerpoint_1.1
Types and Declarations
Boolean Type
bool type – boolean , logic type
bool literal – true, false
int and bool
- Nonzero->true
- Zero ->false
- true ->1
- false->0
1 <= sizeof( bool) <= sizeof(long)
void f(int a,int b)
{
bool b1{a==b};
bool b2 = a==b;
…
}
bool isGreater(int a, int b){return a > b;}
void f()
{
bool a=true,
b=true;
bool x=a+b;
bool y=a||b;
}
Knowing Ranges of Types
// Implementation-dependent
#include <limits>
int main()
{
cout << "largest integer = "
<< numeric_limits<int>::max();
cout << “smallest integer = "
<< numeric_limits<int>::min();
return ;
}
Binary Literal
int a=0b1100,b=0B0101;
::globalId can be used in a local scope, even its name is identical to local one.
int x;
void f()
{
int x=;
::x=;
x=;
…
}//::x means the x is the global one
int x=1;
void f(){
int x=2;
::x=3;
printf("%d\n",x);
}
int main()
{
f();
printf("%d",x);
return 0;
}//output 2 3
auto
If the type of a variable can be deducted from its initialization, keyword auto can be used instead of type name in the definition.
auto i{};
vector<string> v; …
for (const auto& x : v) cout << x << '\n';
for (auto i : {, , , , , , })
cout << i << '\n';
Initialization
four syntactic styles:
- T a1 {v};
- T a2 = {v};
- T a3 = v;
- T a4(v);
Pointers, Arrays and Structures
Variable-size arrays
#include <vector>
using namespace std;
void f(int i)
{
vector<int> v1(i);
vector<int> v2{,,};
vector<int> v3(i,);
…
}
Constants
Keyword const as a modifier
- A constant identifier must be initialized and cannot be assigned
- Prefer to #define macro usage
- Using symbolic constants is better than using literals in the large programs
Pointers and Constants
Prefixing a pointer with const makes an object the pointer points to, not pointer itself, a constant.
const int someInt=;
const int *p = &someInt;
//Or
int const *p = &someInt;
// *p is a constant, p is a variable
To declare a pointer itself to be a constant, use the declarator *const .
int someInt=;
int *const p = &someInt;
// p is a constant
To declare both the pointer and the object the pointer points to be constants, use two const modifiers.
const int someInt=;
const int *const p = &someInt;
//Or
int const *const p = &someInt;
// *p is a constant, p is a constant too.
void f4( )
{ int a=;
const int c=;
const int* p1=&c;
const int* p2=&a; //non const ptr const ptr
int * p3=&c; // Error!
*p3=;
}
// a non-constant pointer can assign to a constant
// pointer, but a constant pointer cannot assign to
// a non-constant pointer.
References
A reference is alias/nickname for an object or a function.
The main usages:
1. specifying arguments and return values
for functions
2. for overloaded operators.
Notation : Typename&
References must be initialized.
void f()
{
int i=;
int& r{i};
int x=r;
r=;
}//Both i and r are occupied the same memory
constant references
Constant Reference can refer to a non lvalue or other type object.
For const T&,
[1] implicit conversion to T if necessary
[2] result is placed in a temporary object
[3] reference to the temporary object
The temporary object persists until the end of its reference's lifetime.
References as Parameters of Functions
The function can change the value of an object passed to it.
This is called call-by-reference passing mechanism. It is different from call-by-value.
void increment(int& a)
{ a++; } //x++
void f()
{
int x=;
increment(x); // x==2
}//Parameter a is initialized with the argument x
The return value of the function can refer to the expression of return statement.
struct Pair{
string name;
double val;
};
vector<Pair> pairs;
double& value(const string& s)
{
for (auto& x: pairs)
if (s==x.name) return x.val;//original val+1;
pairs.push_back({s,});
return pairs.back().val;//0->1
}
int main()
{
for (string buf; cin>>buf;)
// enter ^d in Linux at end of the input
value(buf)++;
for (const auto& x: pairs)
cout << x.name << ": "
<< x.val << '\n';
return ;
}
void*
Pointer to any data type(not function type)
Be able to assign, compare and cast to another pointer type
T* -->void* is type coercion
void*-->T* must use type cast
int i=;
void* pv=&i; // type coercion
int* pi1 = static_cast<int*>(pv);
int* pi2 = (int*)pv;
Structure type name
Typename of a structure is structure tag , keyword struct is unnecessary.
For example:
struct address {…};
type name is address,
but struct address in C.
Structure forward declaration
The typename of a structure is available for use as pointer to structure immediately after it has been encountered and not just after the complete declaration has been seen.
struct Link{ Link* next; … };
To allow two or more types refer to each other, use structure forward declaration.
struct List; struct Link{ List* a; … }; struct List{ Link* a; … };
C++_class_powerpoint_1.1的更多相关文章
- C++_class_powerpoint_1.2
用英文编写(复制黏贴)果然比较吃力啊,果然还是要写中文. Expressions and Statements Operator summary Scope resolution class::m ...
随机推荐
- mvc登录授权特性
public class CommonAuthorize : AuthorizeAttribute { protected override bool AuthorizeCore(HttpContex ...
- .Net Core 中X509Certificate2 私钥保存为 pem 的方法
在自己签发CA证书和颁发X509证书时,私钥通过下面的方法保存为PEM 相关代码可以已经提交在了 https://github.com/q2g/q2g-helper-pem-nuget/pull/13 ...
- JavaEE的起步
因为某些原因,现在要从.net开发转向J2EE了,在这里记录一下学习经历
- python tips:迭代器与可迭代对象
for循环 for i in s: print(i) 在上述for循环中,不断地将s中的值赋值给i,然后打印出来.这种只针对s中元素的循环称为对s的迭代,能够迭代的s称为可迭代的. python为了实 ...
- 查看表之间的关系 需要在eas中的商业分析-扩展报表中心-报表平台下的语义层方案管理
查看表之间的关系 需要在eas中的商业分析-扩展报表中心-报表平台下的语义层方案管理
- GDI 边框绘制函数(8)
绘制矩形 调用 Rectangle 函数可以绘制一个矩形(它将填充这个矩形): BOOL Rectangle( HDC hdc, // 设备环境句柄 int nLeftRect, // 左边线的位置 ...
- TeX中的引号(Tex Quotes, UVa 272)
在TeX中,左双引号是“``”,右双引号是“''”.输入一篇包含双引号的文章,你的任务是 把它转换成TeX的格式. 样例输入: "To be or not to be," quot ...
- Java基本类型转换
1.自动类型转换 java所有的数值型变量都可以相互转换,如果系统支持把某种基本类型的值直接付赋给另一个基本类型的变量,则这种方式被称为自动类型转换. 当把一个表数范围小的数值或变量直接赋给另一个表数 ...
- dev的汉化
dev汉化网上有很多介绍.自己感觉还是用ini文件,用Localization Component来的简单方便. 但是根据其16.1.6的demo死活出问题.原因是ini文件的编码问题.转换到位自然就 ...
- 【ACM】hdu_1234_开门人和关门人_201307300845
开门人和关门人Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...