C++知识点(自用)
2018-04-27 本文已影响0人
烤肉拌饭多加饭
关于struct和class
c++中的struct可以有成员函数,能继承,能实现多态。。。
那struct和class的区别呢?
- class中默认成员访问权限是private,而struct的默认访问权限是public
- class中默认继承方式是private,而struct的默认继承方式是public
关于纯虚函数
class CShape
{
public:
virtual void Show()=0;
};
(虚函数)virtual void Show = 0
为纯虚函数的格式
纯虚函数只能在继承CShape类的派生类中被实现
- 一个函数声明为纯虚后,纯虚函数的意思是:我是一个抽象类!不要把我实例化!纯虚函数用来规范派生类的行为,实际上就是所谓的“接口”。它告诉使用者,我的派生类都会有这个函数。
- 虚函数在类中被抽象为一个方法,无法实例化(CShape无法被实例化)
class CShape
{
virtual void Show();//=0
};
CShape cs; //No! 可以通过编译,但link时失败。
关于虚函数和多态(From:link)
虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。
//给两个A,B类
class A
{
public:
virtual void foo() { cout << "A::foo() is called" << endl;}
};
class B: public A
{
public:
virtual void foo() { cout << "B::foo() is called" << endl;}
};
A * a = new B();
a->foo(); // 在这里,a虽然是指向A的指针,但是被调用的函数(foo)却是B的!
【解释:】一个类函数的调用并不是在编译时刻被确定的,而是在运行时刻被确定的。由于编写代码的时候并不能确定被调用的是基类的函数还是哪个派生类的函数,所以被成为“虚”函数。
虚函数只能借助于指针或者引用来达到多态的效果
字符串的输入
- cin>>
string s;
cin>>s;
cout<<s;
//~ 输入string string;输出string ~
空格,Tab,回车都会结束输入。
- cin.get()
char c;
char s[5];
cin.get(c);//cin.get(字符变量名)
cin.get();//无参数,舍弃不需要的字符,这里是空格
cin.get(s, 5);//cin.get(字符数组名,size)
cout << c << endl;
cout << s << endl;
//input:
//g
//o gogo
//output:
//g
//o gog
最后的cin.get(s,5)接收4个字符+'\0';
- cin.getline()
char s[5];
cin.getline(s, 5);//cin.getline(字符数组名,size,结束字符/默认是'\0');
cout << s << endl;
最后的cin.getline(s,5)接收4个字符+'\0';
- getline(cin,string s)
#include<iostream>
#include<string>
using namespace std;
int main()
{
string str;
getline(cin,str);
cout<<str<<endl;
}
//input:go go go
//output:go go go
- gets(char[] s)
//`std::gets` 于 C++11 被弃用,并从 C++14 被移除。
可使用 std::fgets 替代。