博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
读书笔记之:C++程序设计语言——题解
阅读量:5775 次
发布时间:2019-06-18

本文共 4166 字,大约阅读时间需要 13 分钟。

练习5.9 自引用

程序代码如下:

View Code
#include <iostream>
using 
namespace std;
enum Context{
    c_comment,cpp_comment,string_literal,char_literal,file_end
};
void handle_c_comment(){
    
char ch;
    
while(cin.
get(ch)){
        
if(ch==
'
*
'){
            
while(cin.
get(ch)&&ch==
'
*
')
                ;
            
if(ch==
'
/
')
                
break;
        }
    }
}
void handle_cpp_comment(){
    
char ch;
    
while(cin.
get(ch)&&ch!=
'
\n
')
        ;
}
void handle_literal(
char delimiter){
    cout<<delimiter;
    
char ch;
    
while(cin.
get(ch)){
        cout<<ch;
        
if(ch==delimiter)
            
break;
        
else 
if (ch==
'
\\
')
            cin.
get(ch)&&cout<<ch;
    }
}
Context handle_code(){
    
char ch;
    
while(cin.
get(ch)){
        
switch(ch){
            
case 
'
/
':
                
if(!cin.
get(ch)){
                    cout<<
'
/
';
                    
return file_end;
                }
                
else {
                    
if(ch==
'
*
')
                        
return c_comment;
                    
else 
if(ch==
'
/
')
                        
return cpp_comment;
                    
else{
                        cout<<
'
/
';
                        cin.putback(ch);
                        
break;
                    }
                }
            
case 
'
\"
':
                
return string_literal;
            
case 
'
\'
':
                
return char_literal;
            
default:
                cout<<ch;
        }
    }
    
return file_end;    
}
int main(
int argc,
char**argv){
    
if(argc!=
1){
        cerr<<
"
This program takes no arguments.\n
";
        
return -
1;
    }
    
else{
        Context contxt;
        
while((contxt=handle_code())!=file_end)
            
switch(contxt){
                
case c_comment:
                    handle_c_comment();
                    
break;
                
case cpp_comment:
                    handle_cpp_comment();
                    
break;
                
case string_literal:
                    handle_literal(
'
\"
');
                    
break;
                
case char_literal:
                    handle_literal(
'
\'
');
                    
break;
            }
    }
    
return 
0;
}

 

代码如下:

View Code
#include <iostream>
#include <typeinfo>
using 
namespace std;
#define CTOR(CC){                 \
    cout<<#CC
"
 Constructor:
"      \
        <<typeid(*
this).name()<<
'
\n
';\
    from_outside(
this);\
    cout<<
'
\n
';\
}
#define DTOR(CC){ \
    cout<<#CC 
"
 destructor: 
"\
        <<typeid(*
this).name()<<
'
\n
';\
    from_outside(
this);\
    cout<<
'
\n
';\
}
struct A;
void from_outside(A *
object);
struct A{
    A() CTOR(A)
    ~A() DTOR(A)
};
void from_outside(A *
object){
    cout<<
"
 Located at address: 
"<<(
void*)
object
        <<
"
\nFrom outside: 
"<<typeid(*
object).name()
        <<endl;
}
struct B;
void from_outside(B *
object);
struct B: A{
    B() CTOR(B)
    
virtual ~B() DTOR(B)
};
void from_outside(B *
object){
    cout<<
"
 Located at address: 
"<<(
void*)
object
        <<
"
\nFrom outside: 
"<<typeid(*
object).name()
        <<endl;
}
struct C: B{
    C() CTOR(C)
    
virtual ~C() DTOR(C)
};
struct D: B{
    D() CTOR(D)
    
virtual ~D() DTOR(D)
};
struct E;
void from_outside(E* 
object);
struct E: C,D{
    E() CTOR(E)
    
virtual ~E() DTOR(E)
};
void from_outside(E* 
object){
    from_outside((C*)
object);
    from_outside((D*)
object);
}
struct F: 
virtual B{
    F() CTOR(F)
    
virtual ~F() DTOR(F)
};
struct G:
virtual B{
    G() CTOR(G)
    
virtual ~G() DTOR(G)
};
struct H:F,G{
    H() CTOR(H)
    
virtual ~H() DTOR(H)
};
struct I;
void from_outside(I* 
object);
struct I:E,H{
    I() CTOR(I)
        
virtual ~I() DTOR(I)
};
void from_outside(I* 
object){
    from_outside((C*)
object);
    from_outside((D*)
object);
    from_outside((H*)
object);
}
int main(){
    I complex_obect;
    cout <<
"
Total size of I-object :
"<<
sizeof (I)<<endl;
}

程序输出如下:

 

 

代码如下:

View Code
#include <iostream>
#include <
string>
#include <cctype>
#include <ctime>
#include <cstdio>
using 
namespace std;
bool read_string(
string &s){
    
int 
const buffer_size=
100;
    
char buffer[buffer_size+
1];
    
int i=
0,c;
    
while((c=cin.
get())&&cin&&isspace(c))
        ;
    
while((c=cin.
get())&&cin&&!isspace(c)
            &&i!=buffer_size){
        buffer[i++]=
char(c);
    }
    buffer[i]=
'
\0
';
    s.assign(buffer,i);
    
if(cin){
        cin.putback(c);
        
if(!isspace(c)){
            
string remainder;
            read_string(remainder);
            s.append(remainder);
        }
        
return 
true;
    }
    
else
        
return 
false;
}
bool read_string2(
string& s){
    
int 
const buffer_size=
100;
    
char buffer[buffer_size+
1];
    
int i=
0,c;
    
while((c=getc(stdin))!=EOF&&isspace(c))
        ;
    
while((c=getc(stdin))!=EOF&&!isspace(c)
            &&i!=buffer_size){
        buffer[i++]=
char(c);
    }
    buffer[i]=
'
\0
';
    s.assign(buffer,i);
    
if(c!=EOF){
        ungetc(c,stdin);
        
if(!isspace(c)){
            
string remainder;
            read_string(remainder);
            s.append(remainder);
        }
        
return 
true;
    }
    
else
        
return 
false;
}
int main(){
    
string word;
    
int n=
0;
    
bool not_eof;
    clock_t start=clock();
#if defined(SIMPLE)
    
while(cin)
    {
        cin>>word;
        n++;
    }
#elif defined(SIMPLE2)
    
do{
        not_eof=read_string(word);
        ++n;
    }
while(not_eof);
#else
    
do{
        not_eof=read_string2(word);
        ++n;
    }
while(not_eof);
#endif
    printf(
"
Read %d words in %f seconds.\n
",n,(clock()-start)*
1.0/CLOCKS_PER_SEC);
    
return 
0;
}

 

转载于:https://www.cnblogs.com/xkfz007/archive/2012/08/09/2631094.html

你可能感兴趣的文章
flask的文件上传和下载
查看>>
如何查看java class文件的jdk版本
查看>>
ImportError: cannot import name UnrewindableBodyError
查看>>
翻翻git之---有用的欢迎页开源库 AppIntro
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>
31-hadoop-hbase-mapreduce操作hbase
查看>>
C++ 代码风格准则:POD
查看>>
PHP-Windows下搭建PHP-MSF环境【原创】
查看>>
linux-友好显示文件大小
查看>>
emplace_back() 和 push_back 的区别(转)
查看>>
【转】【WPF】WPF中MeasureOverride ArrangeOverride 的理解
查看>>
ASP、Access、80040e14、保留关键字、INSERT INTO 语句的语法错误
查看>>
【转】二叉树的非递归遍历
查看>>
NYOJ283对称排序
查看>>
坚持的力量
查看>>
接连遇到大牛
查看>>
[Cocos2d-x For WP8]矩形碰撞检测
查看>>
自己写spring boot starter
查看>>
Rails Rake指南
查看>>
花钱删不完负面消息
查看>>